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

📄 charge_settle.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		         "WHERE a.serv_id = b.serv_id   "		         "AND a.serv_seq_nbr = b.serv_seq_nbr   "		         "AND a.edit_time>sysdate "		         "AND a.state = '1'   "		         "AND b.state <> 'F0X'  "		         "AND b.serv_id = %s  "			 ,serv_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));			}				if(lf_once_fee!=0)			{				sprintf(lsTemp,"%s\t3\t%f\tC0C\t%s\r\n",serv_id,lf_once_fee,systime);				strcat(lsReturn,lsTemp);				li_count++;			}      		}    	}    	                	cDatabase->Commit();	if(li_count>0 && lsReturn!=NULL)	{   													StrReturn(0,lsReturn);	}              																					else           																					{              																						StrReturn(100,"没有需要结清的费用!");	}              							     }//-----------------------------------------------------------------//服务PTUndoItem实现函数,传入参数staff_id,acct_id//取结清回退费用信息//-----------------------------------------------------------------void CSettle::PTUndoItem(){	char  lsSql[2048],lsTemp[500],lsErr[500],lsReturn[2048];	int   i,isqlcode,lpnum,rpnum;	char  acct_id[10],serv_id[11],staff_id[20],bill_serial_nbr[30],pay_serial_nbr[30];	char  *lparm[4],tch[2];	int   li_method_id;		//userlog(pInp);	lpnum=3;	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_id=atoi(lparm[2]);	if(li_method_id==0)	{	   strcpy(acct_id,lparm[1]);	   	lpfree(lparm,rpnum);		sprintf(lsSql,	      "SELECT B_CANCEL_ACCT.acct_id,   "	             "sum(B_CANCEL_ACCT.charge) charge,   "	             "B_CANCEL_ACCT.state,   "	             "B_CANCEL_ACCT.state_time,   "	             "to_char(B_CANCEL_ACCT.bill_serial_nbr), " 	             "to_char(B_CANCEL_ACCT.pay_serial_nbr)  "	        "FROM B_CANCEL_ACCT  "	       "WHERE ( B_CANCEL_ACCT.acct_id = %s )  "	         "and ( B_CANCEL_ACCT.state = 'C0P' )  "	       "group by B_CANCEL_ACCT.acct_id,   "	             "B_CANCEL_ACCT.state,    "	             "B_CANCEL_ACCT.state_time,   "	             "B_CANCEL_ACCT.bill_serial_nbr, "	             "B_CANCEL_ACCT.pay_serial_nbr  "	       "order by B_CANCEL_ACCT.state_time DESC "		,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)		{			StrReturn(100,"没有需要回退的项目!");		}		else		{			strcpy(lsReturn,cDatabase->GetData());			sprintf(tch,"%c",1);			strcat(lsReturn,tch);		}		strcpy(bill_serial_nbr,cDatabase->data->GetColData(1,5));		strcpy(pay_serial_nbr,cDatabase->data->GetColData(1,6));				sprintf(lsSql,	      "SELECT B_CANCEL_ACCT.acct_id,   "	             "B_CANCEL_ACCT.bill_item_id,  "	             "B_CANCEL_ACCT.charge,   "	             "B_CANCEL_ACCT.state,   "	             "B_CANCEL_ACCT.state_time,   "	             "B_CANCEL_ACCT.bill_serial_nbr, "	             "B_CANCEL_ACCT.pay_serial_nbr  "	        "FROM B_CANCEL_ACCT  "	       "WHERE B_CANCEL_ACCT.pay_serial_nbr = %s  "		,pay_serial_nbr);			////	//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)		{			cDatabase->Commit();			sprintf(lsTemp,"没有需要回退的项目!");			StrReturn(100,lsTemp);		}		else		{			strcat(lsReturn,cDatabase->GetData());		}	}	else	{	   strcpy(serv_id,lparm[1]);	   	lpfree(lparm,rpnum);				sprintf(lsSql,	      "SELECT B_CANCEL_ACCT.acct_id,   "	             "sum(B_CANCEL_ACCT.charge) charge,   "	             "B_CANCEL_ACCT.state,   "	             "B_CANCEL_ACCT.state_time,   "	             "to_char(B_CANCEL_ACCT.bill_serial_nbr), " 	             "to_char(B_CANCEL_ACCT.pay_serial_nbr)  "	        "FROM B_CANCEL_ACCT  "	       "WHERE ( B_CANCEL_ACCT.serv_id = %s )  "	         "and ( B_CANCEL_ACCT.state = 'C0P' )  "	       "group by B_CANCEL_ACCT.acct_id,   "	             "B_CANCEL_ACCT.state,    "	             "B_CANCEL_ACCT.state_time,   "	             "B_CANCEL_ACCT.bill_serial_nbr, "	             "B_CANCEL_ACCT.pay_serial_nbr  "	       "order by B_CANCEL_ACCT.state_time DESC "		,serv_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)		{			StrReturn(100,"没有需要回退的项目!");		}		else		{			strcpy(lsReturn,cDatabase->GetData());			sprintf(tch,"%c",1);			strcat(lsReturn,tch);		}		strcpy(bill_serial_nbr,cDatabase->data->GetColData(1,5));		strcpy(pay_serial_nbr,cDatabase->data->GetColData(1,6));				sprintf(lsSql,	      "SELECT B_CANCEL_ACCT.acct_id,   "	             "B_CANCEL_ACCT.bill_item_id,  "	             "B_CANCEL_ACCT.charge,   "	             "B_CANCEL_ACCT.state,   "	             "B_CANCEL_ACCT.state_time,   "	             "B_CANCEL_ACCT.bill_serial_nbr, "	             "B_CANCEL_ACCT.pay_serial_nbr  "	        "FROM B_CANCEL_ACCT  "	       "WHERE B_CANCEL_ACCT.pay_serial_nbr = %s  "		,pay_serial_nbr);			////	//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)		{			cDatabase->Commit();			sprintf(lsTemp,"没有需要回退的项目!");			StrReturn(100,lsTemp);		}		else		{			strcat(lsReturn,cDatabase->GetData());		}	}			cDatabase->Commit();	StrReturn(0,lsReturn);}//-----------------------------------------------------------------//服务PTSettle实现函数,传入参数(块一)staff_id,acct_id,acct_seq_nbr//(块二)要更新的数据窗口结清费用数据//销户结清//-----------------------------------------------------------------void CSettle::PTSettle(){	char  lsSql[2048],lsTemp[2048],lsErr[500];	int   isqlcode,lpnum,rpnum;	char  serv_id[20],acct_id[20],acct_seq_nbr[5],staff_id[20],pay_serial_nbr[30],bill_serial_nbr[30];	char  charge[20],bill_item_id[20];	float sum_charge=0.0;	char  *lparm[1024],tch[2];	long  ret,i,j,row=0,col=0,pos;	char  ls_temp[10];	int   li_method_id;	char   change[6];		//userlog(pInp);	//取块一数据分析(单排数据)	sprintf(tch,"%c",1);	pos=strcspn(pInp,tch);	for(i=0;i<pos;i++)	{		lsTemp[i]=pInp[i];	}	lsTemp[i]='\0';	//strncpy(lsTemp,pInp,pos);	//userlog(lsTemp);		lpnum=5;	rpnum=GetInputParm(lsTemp,lparm,100);	sprintf(ls_temp,"%d",rpnum);	//userlog("rpnum");	//userlog(ls_temp);	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]);	strcpy(acct_id,lparm[1]);	strcpy(acct_seq_nbr,lparm[2]);	li_method_id=atoi(lparm[3]);	if(li_method_id!=0)	{		strcpy(serv_id,lparm[4]);	}		lpfree(lparm,rpnum);	//取块二数据分析(多排数据)	strncpy(lsTemp,pInp+pos+1,strlen(pInp)-pos);	//userlog(lsTemp);		ret=GetMulRowData(lsTemp,lparm,&row,&col,100);	//userlog("ret= %d  row= %d  col= %d",ret,row,col);	if(ret<=0)	{		lpfree(lparm,1024);		strcpy(lsTemp,"解析客户端传入多排参数失败,可能参数传输格式不正确!\n");		if(WriteLog(cDatabase,"-1","w_p_settle",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);		}		cDatabase->BeginTran();		//取付款流水号	if(GetMaxPayNo(cDatabase,staff_id,pay_serial_nbr,lsErr)!=1 || pay_serial_nbr==NULL)	{		strcpy(lsTemp,"取付款流水号出错!\n");		strcat(lsTemp,lsErr);		if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		lpfree(lparm,ret);			cDatabase->Commit();		StrReturn(-2,lsTemp);	}		//取销帐流水号        if(GetMaxBillNo(cDatabase,staff_id,bill_serial_nbr,lsErr)!=1 || bill_serial_nbr==NULL)	{		strcpy(lsTemp,"取销帐流水号出错!\n");		strcat(lsTemp,lsErr);		if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		lpfree(lparm,ret);			cDatabase->Commit();		StrReturn(-2,lsTemp);	}	//按合同号结清       if (li_method_id==0)    {		//循环开始	for(i=0;i<row;i++)	{	   j=i*col;	   	   strcpy(bill_item_id,lparm[j+1]);	   strcpy(charge,lparm[j+2]);	   sum_charge=sum_charge+atof(charge);	   if(strcmp(bill_item_id,"2")==0)	   {	   	strcpy(change,charge);	   }		   	   //Case开始	   switch(atoi(bill_item_id))	   {	   	case 1:	   		   	sprintf(lsSql,	   	" UPDATE B_ACCT_ITEM_O "	   	"  set state='20P', "	   	"   bill_serial_nbr=%s "	   	" where acct_id = %s and "	   	 " state in ('20C','20Q','20Y','20T')"	   	 ,bill_serial_nbr,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);			lpfree(lparm,ret);						cDatabase->Commit();			StrReturn(-1,lsTemp);		} 		break;			   	case 2:	   		   	//更新销帐库零钞		sprintf(lsSql,		"UPDATE B_ACCT  "		"SET change = 0  "		"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||cDatabase->GetRowCount()!=1)		{				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);			lpfree(lparm,ret);						cDatabase->Commit();			StrReturn(-1,lsTemp);		}			   	//更新计费库零钞		sprintf(lsSql,		"UPDATE LBAS.ACCT  "		"SET change = 0  "		"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||cDatabase->GetRowCount()!=1) 		{				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);

⌨️ 快捷键说明

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