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

📄 charge_balance0908.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		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);	}			//插入预付款的存取款记录	rt=GetMaxPayNo(cDatabase,staff_id,paymaxno,lsErr);	if(rt!=1)	{		strcpy(lsTemp,"生成预付款付取款记录流水号时出错!\n");		strcat(lsTemp,lsErr);		strcat(lsTemp,"\n");		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);			}		//userlog(paymaxno);	sprintf(lsSql," select seq_balance_hist_admin.nextval from dual ");	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);	}			sprintf(hist_id,rtrim(ltrim(cDatabase->GetData())));		/*	sprintf(lsSql,	"INSERT INTO PAYMENT  "	"(pay_serial_nbr,acct_id,acct_seq_nbr,payment_method,operation_type,  "	"oper_serial_nbr,amount,pay_date,staff_id,state,state_date,chequ_nbr,card_nbr)  "	"VALUES(%s,%s,%s,'40','%s',  "	"null,%ld, sysdate,%s,'C0C',sysdate,'%s','')  "	,hist_id,acct_id,acct_seq_nbr,ls_optype,amount,staff_id,checknbr);*/	sprintf(lsSql,	"INSERT INTO PAYMENT  "	"(pay_serial_nbr,acct_id,acct_seq_nbr,payment_method,operation_type,  "	"oper_serial_nbr,amount,pay_date,staff_id,state,state_date,chequ_nbr,card_nbr)  "	"select %s,%s,%s,payment_method,'%s',  "	"null,%ld, sysdate,%s,'C0C',sysdate,'%s','' from lbas.acct  "	"where acct_id=%s and acct_seq_nbr=%s  "	,hist_id,acct_id,acct_seq_nbr,ls_optype,amount,staff_id,checknbr,acct_id,acct_seq_nbr);		//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		if(isqlcode<0) 	{			strcpy(lsTemp,"向销帐库的PAYMENT表中插入存取款记录时出错!\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,present )    "	"VALUES (%s,%s,%ld,'%s',  "	"%s,%ld + %ld,sysdate,'01',%ld)	  "	,hist_id,acct_id,amount,ls_conduct,staff_id,balance,lde_present,lde_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表中插数据时出错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);	}			if(lde_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,%ld,%ld,to_date('%s','yyyy-mm-dd'),%s,'01',sysdate,%ld + %ld,%s )"		  ,hist_id,acct_id,amount,lde_present,ls_eff_date,ls_month,balance,lde_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);		}		  	}			strcpy(lsTemp,systime);   }      //销帐  // if((total_amount>=0)&&(amount>=0)) 	//销帐实收费用大于0,并且存款 才执行销帐   if(write_flag==1)   {	if( atof(derate)>0) 	{		sprintf(lsSql,"INSERT INTO B_ACCT_ITEM_O "				      "SELECT min(acct_item_id),null,null,%s,%s,1, "		        		" %s*100, "					" %s,sysdate,1,'20C',sysdate,0,0,1,1,null,'1' "				      "FROM B_ACCT_ITEM_O "				      "WHERE acct_id =%s "					" and acct_seq_nbr=%s "					" and billing_cycle_id=%s "					" and state IN ('20C','20Q','20T','20Y','20S','20Z') "				      ,acct_id,acct_seq_nbr,derate,billing_cycle_id,acct_id,acct_seq_nbr,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");					        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);		}	}	/////////////////////////////////////////	//从库中取总余额		sprintf(lsSql, "select total_amount,advance,present  "	"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();		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		strcpy(ls_w_balance,cDatabase->data->GetColData(1,1));	strcpy(ls_w_advance,cDatabase->data->GetColData(1,2));	strcpy(ls_w_present,cDatabase->data->GetColData(1,3));		w_balance=atol(ls_w_balance);	w_advance=atol(ls_w_advance);	w_present=atol(ls_w_present);	w_balance-=total_amount;//剩余总余额	long writeoff_advance, writeoff_present ;	if(w_advance>=total_amount)	{				w_advance-=total_amount;		writeoff_advance = total_amount;		writeoff_present = 0 ;	}	else	{		w_present-=(total_amount - w_advance);//预存款余额		writeoff_advance = w_advance ;		writeoff_present = total_amount - w_advance;		w_advance=0;	}/////////////////////////////////////////           isqlcode=GetMaxBillNo(cDatabase,staff_id,bill_serial_nbr,lsTemp);	   if(isqlcode<0)	   {		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"提取最大销帐流水号出错2");strcat(lsTemp,"\n");		//userlog("提取最大销帐流水号出错2");		if(WriteLog(cDatabase,staff_id,"w_p_balance",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		StrReturn(-1,lsTemp);	   }           isqlcode=GetMaxPayNo(cDatabase,staff_id,pay_serial_nbr,lsTemp);	   if(isqlcode<0)	   {		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"提取最大付款流水号出错2");strcat(lsTemp,"\n");		//userlog("提取最大付款流水号出错2");		if(WriteLog(cDatabase,staff_id,"w_p_balance",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		StrReturn(-1,lsTemp);	   }	              sprintf(lsSql,"update b_acct_item_o "                      " set bill_serial_nbr=%s ,"                      " state='20P' "                      " where acct_id=%s"                      " and billing_cycle_id=%s"                      " and state IN ('20C','20Q','20T','20Y','20S','20Z')"                      ,bill_serial_nbr,acct_id,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);		}				sprintf(lsSql,	" INSERT INTO intf_acct_item(Acct_item_id,Billing_cycle_id,Acct_id, "					" Serv_id,Acct_item_type_id,Charge,Action,Action_date) "					" SELECT to_char(acct_item_id),to_char(billing_cycle_id),to_char(acct_id),to_char(serv_id), "					" to_char(acct_item_type_id),charge,'01',sysdate "					" FROM  B_ACCT_ITEM_O "	                 " WHERE acct_id=%s"	                 " AND bill_serial_nbr=%s "	                  " AND billing_cycle_id=%s"	                  " AND state IN ('20P','20R')"	                  " AND acct_item_type_id not in (1,999999,999998) "	                  ,acct_id,bill_serial_nbr,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);		}		            sprintf(lsSql," update b_acct "                       " set change=0, "                       " balance=%ld "                       " where acct_id=%s"                       " and  state='10A' "                       ,w_balance,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");					        cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			StrReturn(-1,lsTemp);		}            		            sprintf(lsSql," update lbas.acct "                       " set change=0, "                       " balance=%ld "                       " where acct_id=%s"                       " and  state='10A' "                       ,w_balance,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");					        cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)				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)

⌨️ 快捷键说明

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