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

📄 charge_adjust.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
字号:
#include "charge_adjust.h"#include "payment.flds.h"//-----------------------------------------------------------------//构造函数//-----------------------------------------------------------------CAdjust::CAdjust(char *pcInp,COracle *pcDatabase){	cDatabase = pcDatabase;	pInp = pcInp;}//-----------------------------------------------------------------//服务PAGetItem By Acct实现函数,传入参数staff_id,acct_id//-----------------------------------------------------------------void CAdjust::GetAdjustAcct(char *staff_id,char *acct_id){	char lsSql[2048],lsTemp[1024],lsErr[300];	int isqlcode;	long lrow;		//userlog("\nreceive data staff_id: %s acct_id: %s",staff_id,acct_id);			//验证合同号有效性	sprintf(lsSql,	"SELECT 'OK'  "		"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());	//userlog("检索返回行数:%d",cDatabase->GetRowCount());	if(isqlcode<0)	{		strcpy(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");		if(WriteLog(cDatabase,staff_id,"w_p_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}	lrow=cDatabase->GetRowCount();	if(lrow==0 ) 	{		cDatabase->Commit();		StrReturn(100,"该合同号不存在!\n");	}	//检索帐户信息和帐目信息	sprintf(lsSql,  "SELECT a.acct_id,   "         "a.acct_seq_nbr,   "         "a.acct_type_id,   "         "a.customer_name,   "         "a.address_id,   "         "b.charge/100 fee,   "         "b.billing_cycle_id,   "         "a.state,   "         "b.state,   "         "b.serv_id,   "         "b.serv_seq_nbr,   "         "b.special_acct_flag,   "         "b.acct_item_id,   "         "c.name,   "         "d.payment_method_name  "    "FROM B_ACCT a,   "         "B_ACCT_ITEM_O b,   "         "B_ACCT_ITEM_TYPE_O c,   "         "domain_payment_method  d   "   "WHERE ( a.acct_id = b.acct_id ) and  "         "( a.acct_seq_nbr = b.acct_seq_nbr ) and  "         "( b.acct_item_type_id = c.acct_item_type_id ) and  "         "( a.payment_method = d.payment_method ) and  "         "( a.acct_id = %s ) AND  "         "( b.acct_item_type_id > 0) AND  "         "(a.state = '10A') AND  "         "(b.state in ( '20C' ,'20T','20Q','20Y','20S','20Z' ) )    "  //         "(b.state in ( '20C' ,'20D','20Q' ) )    "	 ,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_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}	if(isqlcode==0 && cDatabase->GetRowCount()==0) 	{		cDatabase->Commit();		StrReturn(100,"该合同号下已无可调帐目!\n");	}	cDatabase->Commit();	StrReturn(0,cDatabase->GetData());	}//-----------------------------------------------------------------//服务PAGetItem By Telnum实现函数,传入参数staff_id,acc_nbr//是否异地调帐标识otherarea,本营业区最大最小合同号//-----------------------------------------------------------------void CAdjust::GetAdjustServ(char *staff_id,char *acc_nbr,int otherarea,char *min_acct,char *max_acct){	char lsSql[2048],lsTemp[1024],lsErr[500];	int isqlcode;	char acct_id[20];	long lrow;			//userlog("\nreceive data  acc_nbr: %s",acc_nbr);		//验证电话号码有效性	sprintf(lsSql,   	"SELECT acct_id  "		"FROM B_SERV  "	"WHERE acc_nbr='%s'  "	" and state<>'F0X' "	,acc_nbr);		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,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");		if(WriteLog(cDatabase,staff_id,"w_p_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		lrow=cDatabase->GetRowCount();	if(lrow!=1)	{		if(lrow==0 ) 		{			cDatabase->Commit();			StrReturn(100,"该电话号码不存在!\n");		}		if(lrow>1) 		{			strcpy(lsTemp,"利用电话号码查找对应合同号出错!\n");			if(WriteLog(cDatabase,staff_id,"w_p_adjust",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			StrReturn(-2,lsTemp);			}	}		strcpy(acct_id,cDatabase->data->GetColData(1,1));	if(otherarea==0)	{		if(atol(acct_id)<atol(min_acct) || atol(acct_id)>=atol(max_acct))		{			cDatabase->Commit();			StrReturn(100,"不允许进行异地调帐!\n");		}	}			//检索用户信息和帐目信息	sprintf(lsSql,  "SELECT a.acct_id,   "         "a.acct_seq_nbr,   "         "a.acct_type_id,   "         "a.customer_name,   "         "a.address_id,   "         "b.billing_cycle_id,   "         "a.state,   "         "b.state,   "         "b.serv_id,   "         "b.serv_seq_nbr,   "         "b.special_acct_flag,   "         "b.acct_item_id,   "         "b.charge/100.0 fee,   "         "d.name,   "         "e.payment_method_name  "    "FROM B_ACCT a,   "         "B_ACCT_ITEM_O b,   "         "B_SERV c,   "         "B_ACCT_ITEM_TYPE_O d,   "         "domain_payment_method e  "   "WHERE ( a.acct_id = b.acct_id ) and  "         "( a.acct_seq_nbr = b.acct_seq_nbr ) and  "         "( b.serv_id = c.serv_id ) and  "         "( b.serv_seq_nbr = c.serv_seq_nbr ) and  "         "( b.acct_item_type_id = d.acct_item_type_id ) and  "         "( a.payment_method = e.payment_method ) and  "         "( ( c.acc_nbr = '%s' ) AND  "         "( c.state in ('F0A','F0J','F0L') ) ) AND  "         "(b.acct_item_type_id > 0) AND  "         "(b.state in ('20C' ,'20T','20Q','20Y','20S','20Z'))    "//         "(b.state in ('20C','20Q','20D'))    "	 ,acc_nbr);		//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_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);			}	cDatabase->Commit();	if(isqlcode==0 && cDatabase->GetRowCount()==0) 		StrReturn(100,"该电话号下已无可调帐目,请用合同号再试!\n");	StrReturn(0,cDatabase->GetData());	}void CAdjust::SetAdjustItem(){	char lsSql[2048],lsTemp[1024],lsErr[500];	char *lparm[5];	char staff_id[20],acct_item_id[20],ls_charge[20],ls_reason[200];	int i,isqlcode,lpnum,rpnum;		lpnum=4;	rpnum=GetInputParm(pInp,lparm,200);	if(rpnum!=lpnum)	{		lpfree(lparm,rpnum);		strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n");		if(WriteLog(cDatabase,"-1","w_p_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);	}	for(i=0;i<lpnum;i++)	//userlog("lparm %d: %s",i,lparm[i]);	strcpy(staff_id,lparm[0]);		strcpy(acct_item_id,lparm[1]);	strcpy(ls_charge,lparm[2]);	strcpy(ls_reason,lparm[3]);	rtrim(ls_reason);	lpfree(lparm,rpnum);			cDatabase->BeginTran();		//检查该条帐目是否已被调帐	sprintf(lsSql,	"SELECT	acct_item_id,special_acct_flag   "	"FROM B_ACCT_ITEM_O  "	"WHERE acct_item_id=%s and   "		"special_acct_flag='2'  "	,acct_item_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");		if(WriteLog(cDatabase,staff_id,"w_p_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		if(cDatabase->GetRowCount()>=1)	{		cDatabase->Commit();		StrReturn(100,"该帐目已被调帐,不能再调!");	}			//生成调帐帐目		sprintf(lsSql,	"INSERT INTO B_ACCT_ITEM_O   "		"(acct_item_id ,serv_id ,serv_seq_nbr ,acct_id,acct_seq_nbr ,  "       		"acct_item_type_id ,charge ,billing_cycle_id ,created_date ,  "       		"partner_id ,state  ,state_date , traffic ,record ,  "       		"bill_item_id ,invo_item_id ,bill_serial_nbr,special_acct_flag )   "	"SELECT    acct_item_id,   "        	  "serv_id,   "		  "serv_seq_nbr,   "		  "acct_id,   "		  "acct_seq_nbr,   "		  "acct_item_type_id,   "		  "%s,   "		  "billing_cycle_id,   "		  "sysdate,   "		  "partner_id,   "		  "state,   "		  "sysdate,   "		  "traffic,   "		  "record,    "		  "bill_item_id,    "		  "invo_item_id,    "		  "bill_serial_nbr,    "		  "'2'   "	"FROM B_ACCT_ITEM_O   "	"WHERE acct_item_id=%s   "	,ls_charge,acct_item_id);		//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		if(isqlcode<0||cDatabase->GetRowCount()!=1)	{			strcpy(lsTemp,"生成调帐帐目出错!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		cDatabase->Rollback();		if(WriteLog(cDatabase,staff_id,"w_p_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		//生成调帐历史记录	sprintf(lsSql,	"INSERT INTO ADJUST_HIST(  "		"acct_id,   "		"serv_id,  "		"billing_cycle_id,   "		"acct_item_type_id,   "		"acct_item_id,  "		"by_acct_item_id,  "		"adjust_amount,   "		"reason,   "		"staff_id,  "		"adjust_date)  "	"SELECT	acct_id,  "		"serv_id,   "		"billing_cycle_id,  "		"acct_item_type_id,  "		"acct_item_id,  "		"%s,   "		"%s,  "		"'%s',  "		"%s,   "		"sysdate  "	"FROM B_ACCT_ITEM_O  "	"WHERE acct_item_id=%s and   "		"special_acct_flag='2'  "	,acct_item_id,ls_charge,ls_reason,staff_id,acct_item_id);		//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		if(isqlcode<0||cDatabase->GetRowCount()!=1)	{			strcpy(lsTemp,"生成调帐历史记录出错!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		cDatabase->Rollback();		if(WriteLog(cDatabase,staff_id,"w_p_adjust",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}			cDatabase->Commit();	StrReturn(0,"调帐成功!\n");	}

⌨️ 快捷键说明

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