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

📄 charge_settle.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			StrReturn(-1,lsTemp);		}	   		   		   	break;	   }	   //case结束                      //插入销户结清历史记录	   sprintf(lsSql,	   "INSERT INTO B_CANCEL_ACCT (cancel_id,acct_id,bill_item_id,  "	   	"charge,state,state_time,pay_serial_nbr,bill_serial_nbr,serv_id )  "	   "VALUES (seq_b_cancel_acct.nextval,%s,%s,to_number('%s'), "	   	"'C0P',sysdate,%s,%s,%s)  "	   ,acct_id,bill_item_id,charge,pay_serial_nbr,bill_serial_nbr,serv_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);            }        }//循环结束      }        	lpfree(lparm,ret);  //	//userlog("sum_charge= %f",sum_charge);        sprintf(lsSql,        " insert into bill(BILL_SERIAL_NBR,PAY_SERIAL_NBR,CREATED_DATE,STAFF_ID,PAY_DATE,SETTLE_DATE,PRINT_COUNT,PRINT_DATE,AREA_CODE,ACC_NBR,STATE,STATE_DATE,BILL_SERIAL_NBS,AMOUNT,ACCT_ID,CHANGE ) "        " values( %s,%s,sysdate,%s,sysdate,sysdate,1,sysdate,null,null,'40C',sysdate,%s,%f*100,%s,%s*100) "        ,bill_serial_nbr,pay_serial_nbr,staff_id,bill_serial_nbr,sum_charge,acct_id,change);  	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);			cDatabase->Commit();		StrReturn(-1,lsTemp);	}				       	//插入付款记录	sprintf(lsSql,	"INSERT INTO PAYMENT  "	"VALUES ( %s,%s,%s,'11','0A',  "			 "%s,%f*100,sysdate,%s,  "			 "'C0C',sysdate,null,null)  "	,pay_serial_nbr,acct_id,acct_seq_nbr,pay_serial_nbr,sum_charge,staff_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);			cDatabase->Commit();		StrReturn(-1,lsTemp);	}					cDatabase->Commit();	StrReturn(0,"销户成功!");}//-----------------------------------------------------------------//服务PTUndo实现函数,传入参数(块一)staff_id,acct_id,acct_seq_nbr//(块二)要更新的数据窗口回退费用数据//结清回退//-----------------------------------------------------------------void CSettle::PTUndo(){	char  lsSql[2048],lsTemp[2048],lsErr[500];	int   isqlcode,lpnum,rpnum;	char  acct_id[10],serv_id[11],staff_id[20],pay_serial_nbr[30];	char  charge[20],bill_item_id[20],acct_seq_nbr[10],ls_bill_serial_nbr[30],ls_pay_serial_nbr[30];	float sum_charge=0.0;	char  *lparm[1024],tch[2];	long  ret,i,j,row=0,col=0,pos;	int   li_method_id;	char  areacode[6],acc_nbr[16];	char  billing_cycle_id[10];		//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);	lpnum=10;	rpnum=GetInputParm(lsTemp,lparm,100);	//userlog(lsTemp);	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]);	}		strcpy(ls_bill_serial_nbr,lparm[5]);	strcpy(ls_pay_serial_nbr,lparm[6]);	strcpy(areacode,lparm[7]);	strcpy(acc_nbr,lparm[8]);	strcpy(billing_cycle_id,lparm[9]);		lpfree(lparm,rpnum);	//取块二数据分析(多排数据)	strncpy(lsTemp,pInp+pos+1,strlen(pInp)-pos);		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(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);		   		   //Case开始		   switch(atoi(bill_item_id))		   {		      case 1:		        sprintf(lsSql,		   	" update B_ACCT_ITEM_O "		   	" set state='20C' "		   	" where acct_id = %s and "		   	" bill_serial_nbr = %s and "		   	 " state in ('20P')"		   	 ,acct_id,ls_bill_serial_nbr);		   	 		        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);			} 					   	sprintf(lsSql," begin lbas.p_a_acct_realtime_back(%s,%s,:returncode ); end;",acct_id,billing_cycle_id); 	                //userlog(lsSql);	                char ls_return[40];			strcpy(ls_return,cDatabase->ExecProc(lsSql));			if(ls_return[0]>'9') 			{						StrReturn(-1,ls_return);			}					 					break;					   	case 2:		   			   	//更新销帐库零钞			sprintf(lsSql,			"UPDATE B_ACCT   "			"SET change = to_number('%s')*100  "			"WHERE acct_id = %s AND  "				"state = '10A'  "			,charge,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 = to_number('%s')*100  "			"WHERE acct_id = %s AND  "				"state = '10A'  "			,charge,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);			}					   			   	break;		   			   	case 3:		   			   	//修改帐户一次性费用表数据			sprintf(lsSql,			"UPDATE LBAS.ACCT_ONCE_FEE  "			"SET state='1',  "				"state_date=sysdate  "			"WHERE acct_id= %s	AND  "				"state='A'  "			,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);			}	   			   			   			   	//修改用户一次性费用表数据			sprintf(lsSql,			"UPDATE LBAS.SERV_ONCE_FEE  "				"SET state='1',  "				"state_date=sysdate,  "				"acct_id = %s,  "				"acct_seq_nbr = %s  "			" WHERE rowid in (SELECT a.rowid "			"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  "				"b.acct_id=%s and "				"b.state='F0A' AND  "				"a.state='A')  "			,acct_id,acct_seq_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 4:		   			   	//修改托收节余			sprintf(lsSql,			"UPDATE COMIT_BALANCE  "			"SET state='02',  "				"state_date=sysdate  "			"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);				lpfree(lparm,ret);						cDatabase->Commit();				StrReturn(-1,lsTemp);			}	   			   			   	//插入托收节余记录			sprintf(lsSql,			"INSERT INTO COMIT_BALANCE  "			"VALUES (SEQ_COMIT_BALANCE.NEXTVAL,%s,%s,0,  "				"0,100*to_number('%s'),  "				"'0B',%s,  "				"sysdate,'01',%s)  "			,acct_id,acct_seq_nbr,charge,staff_id,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);				lpfree(lparm,ret);						cDatabase->Commit();				StrReturn(-1,lsTemp);			}						break;						case 5:					   	//插入预付款记录			sprintf(lsSql,			"INSERT INTO BALANCE_HIST_ADMIN  "			"VALUES (SEQ_BALANCE_HIST_ADMIN.NEXTVAL,%s,100*to_number('%s'),'B',%s,  "				"100*to_number('%s'),sysdate,NULL,'01')  "			,acct_id,charge,staff_id,charge);				////	//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);			}											//更新销帐库预付款金额			sprintf(lsSql,			"UPDATE B_ACCT  "			"SET balance = 100*to_number('%s')  "			"WHERE acct_id = %s AND  "				"state = '10A'  "			,charge,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 balance = 100*to_number('%s')  "			"WHERE acct_id = %s AND  "				"state = '10A'  "			,charge,acct_id);				////	//userlog(lsSql);			cDatabase->DoSql(lsSql);

⌨️ 快捷键说明

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