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

📄 charge_payment.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
									 "a.serv_id,  "								         "a.billing_cycle_id,  "								         "a.partner_id,  "								         "a.bill_item_id",Code);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();                       //userlog(lsSql);			if(isqlcode<0)			{				strcpy(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");				strcpy(lsRetstr,"提取电话号帐目出错");				if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsRetstr,lsTemp),lsErr)!=1)					strcat(lsTemp,lsErr);				cDatabase->Commit();				StrReturn(-1,lsTemp);			}			lrow=cDatabase->GetRowCount();			if(lrow==0) 			{				cDatabase->Commit();				StrReturn(100,"未找到电话号帐目");			}			cDatabase->Commit();			StrReturn(0,cDatabase->GetData());		default:			cDatabase->Commit();			StrReturn(-1,"未知的销帐类型");	}}void CPayment::WriteOff(){	char lsSql[2048],lsTemp[1024],lsErr[500],lsRetstr[2048],lsRettemp[500];	int isqlcode,lrow,item_count;	FBFR32 *tpst;	FLDLEN32 len=20,rcvlen;	char acct_id[9],billing_cycle_id[7],partner_id[5],bill_item_id[7],serv_id[11];	char late_fee[10],derated[10],max_item_id[20],payment_method[3];	char StaffID[7],bill_serial_nbs[19],pay_serial_nbs[19],bill_serial_nbr[19];	char acct_id_cur[9],billing_cycle_id_cur[7],chequ_nbr[25],card_nbr[21];	char old_change[3],new_change[3],acct_seq_nbr[4];	char charge_cur[11],charge_total[11],charge[11],amount[11],pay_type[2],change_type[2];	long balance,new_balance,ll_amount;	char ls_w_balance[20],ls_w_advance[20],ls_w_present[20];//余额	long w_balance,w_advance,w_present;//余额	acct_id[0]=0;billing_cycle_id[0]=0;partner_id[0]=0;bill_item_id[0]=0;serv_id[0]=0;	late_fee[0]=0;derated[0]=0;max_item_id[0]=0;payment_method[0]=0;	StaffID[0]=0;bill_serial_nbs[0]=0;pay_serial_nbs[0]=0;bill_serial_nbr[0]=0;	acct_id_cur[0]=0;billing_cycle_id_cur[0]=0;chequ_nbr[0]=0;card_nbr[0]=0;	old_change[0]=0;new_change[0]=0;acct_seq_nbr[0]=0;	charge_cur[0]=0;charge_total[0]=0;charge[0]=0;amount[0]=0;pay_type[0]=0;change_type[0]=0;       	int user_num,item_num,late_num;	float charge_sum=0.0;	tpst=(FBFR32 *)pInp;	Fprint32(tpst);	len=20;	Fget32(tpst,USER_NUM,0,lsTemp,&len);	user_num = atoi(lsTemp);	len=20;	Fget32(tpst,ITEM_NUM,0,lsTemp,&len);	item_num = atoi(lsTemp);	len=20;	Fget32(tpst,LATE_NUM,0,lsTemp,&len);	late_num = atoi(lsTemp);	len=20;	Fget32(tpst,STAFF_ID,0,lsTemp,&len);	strcpy(StaffID,lsTemp);	len=30;	Fget32(tpst,CHEQU_NBR_PAY,0,lsTemp,&len);	strcpy(chequ_nbr,lsTemp);	len=30;	Fget32(tpst,CREDIT_CARD_NBR_PAY,0,lsTemp,&len);	strcpy(card_nbr,lsTemp);	len=10;	Fget32(tpst,PAY_TYPE,0,lsTemp,&len);	strcpy(pay_type,lsTemp);	len=10;	Fget32(tpst,CHANGE_TYPE,0,lsTemp,&len);	strcpy(change_type,lsTemp);        	cDatabase->BeginTran();	isqlcode=GetMaxBillNo(cDatabase,StaffID,bill_serial_nbs,lsTemp);	if(isqlcode<0)	{		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"提取最大销帐流水号出错2");strcat(lsTemp,"\n");		if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		StrReturn(-1,lsTemp);	}	sprintf(bill_serial_nbr,bill_serial_nbs);	isqlcode=GetMaxPayNo(cDatabase,StaffID,pay_serial_nbs,lsTemp);	if(isqlcode<0)	{		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"提取最大付款流水号出错3");strcat(lsTemp,"\n");		if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		StrReturn(-1,lsTemp);	}	len=20;	Fget32(tpst,ACCT_ID_ITEM,0,lsTemp,&len);	strcpy(acct_id,lsTemp);	len=20;	Fget32(tpst,BILLING_CYCLE_ID_ITEM,0,lsTemp,&len);	strcpy(billing_cycle_id,lsTemp);	for(lrow=1;lrow<=user_num;lrow++)	{		len=20;		Fget32(tpst,ACCT_ID_USER,lrow-1,lsTemp,&len);		if(strcmp(lsTemp,acct_id)==0)		{			len=20;			Fget32(tpst,CHANGE_USER,lrow-1,lsTemp,&len);			strcpy(old_change,lsTemp);			lsTemp[0]=0;			len=sizeof(lsTemp);			Fget32(tpst,BALANCE_USER,lrow-1,lsTemp,&len);			balance=atol(lsTemp);			lsTemp[0]=0;			len=sizeof(lsTemp);			Fget32(tpst,NEW_BALANCE_USER,lrow-1,lsTemp,&len);			new_balance=atol(lsTemp);		}	}	sprintf(new_change,old_change);	sprintf(charge_total,"0");	sprintf(charge,"0");	for(lrow=1;lrow<=item_num;lrow++)	{		len=20;		Fget32(tpst,ACCT_ID_ITEM,lrow-1,lsTemp,&len);		strcpy(acct_id_cur,lsTemp);		len=20;		Fget32(tpst,SERV_ID_ITEM,lrow-1,lsTemp,&len);		strcpy(serv_id,lsTemp);		len=20;		Fget32(tpst,BILLING_CYCLE_ID_ITEM,lrow-1,lsTemp,&len);		strcpy(billing_cycle_id_cur,lsTemp);		len=20;		Fget32(tpst,PARTNER_ID_ITEM,lrow-1,lsTemp,&len);		strcpy(partner_id,lsTemp);		len=20;		Fget32(tpst,INVO_ITEM_ID_ITEM,lrow-1,lsTemp,&len);		strcpy(bill_item_id,lsTemp);		len=20;		Fget32(tpst,CHARGE_ITEM,lrow-1,lsTemp,&len);		strcpy(charge_cur,lsTemp);		len=20;		Fget32(tpst,ITEM_COUNT_ITEM,lrow-1,lsTemp,&len);		item_count = atoi(lsTemp);						//userlog("charge_total0=%s,charge_sum=%.0f,lrow=%d",charge_total,charge_sum,lrow);		if(strcmp(acct_id,acct_id_cur)!=0||strcmp(billing_cycle_id,billing_cycle_id_cur)!=0)		{						for(int lrow1=1;lrow1<=late_num;lrow1++)			{				len=20;				Fget32(tpst,ACCT_ID_LATE,lrow1-1,lsTemp,&len);				if(strcmp(acct_id,lsTemp)==0)				{											len=20;					Fget32(tpst,BILLING_CYCLE_ID_LATE,lrow1-1,lsTemp,&len);					if(strcmp(billing_cycle_id,lsTemp)==0)					{						len=20;						Fget32(tpst,LATE_FEE_LATE,lrow1-1,lsTemp,&len);						strcpy(late_fee,lsTemp);						len=20;						Fget32(tpst,DERATE_LATE,lrow1-1,lsTemp,&len);						strcpy(derated,lsTemp);						len=20;						Fget32(tpst,ACCT_ITEM_ID_LATE,lrow1-1,lsTemp,&len);						strcpy(max_item_id,lsTemp);						if(atof(late_fee)!=0.0)						{							sprintf(lsSql,"INSERT INTO B_ACCT_ITEM_O SELECT acct_item_id,serv_id,serv_seq_nbr,acct_id,acct_seq_nbr,1,%s,billing_cycle_id,sysdate,1,'20P',sysdate,0,0,1,1,%s,'1' FROM B_ACCT_ITEM_O WHERE acct_item_id=%s and special_acct_flag='0'",late_fee,bill_serial_nbr,max_item_id);							//userlog(lsSql);							cDatabase->DoSql(lsSql);							isqlcode=cDatabase->GetSqlCode();							if(isqlcode<0)							{								strcpy(lsRetstr,cDatabase->GetSqlErrText());								cDatabase->Rollback();								strcpy(lsTemp,"插入帐期滞纳金出错");strcat(lsTemp,"\n");								if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsTemp,lsRetstr),lsErr)!=1)								{									strcat(lsTemp,lsErr);									cDatabase->Rollback();								}								else									cDatabase->Commit();								StrReturn(-1,lsTemp);							}							if(cDatabase->GetRowCount()!=1)							{								strcpy(lsTemp,"插入帐期滞纳金出错,插入数目不合");								cDatabase->Rollback();								if(WriteLog(cDatabase,StaffID,"w_p_charge",lsTemp,lsErr)!=1)								{									strcat(lsTemp,lsErr);									cDatabase->Rollback();								}								else									cDatabase->Commit();								StrReturn(-1,lsTemp);							}						}						if(atof(derated)!=0.0)						{							sprintf(lsSql," INSERT INTO B_ACCT_ITEM_O "							              " SELECT acct_item_id,serv_id,"							              "        serv_seq_nbr,acct_id,"							              "        acct_seq_nbr,1,(-1)*%s,"							              "        billing_cycle_id,sysdate,"							              "        1,'20P',sysdate,0,0,1,1,%s,'3' "							              "   FROM B_ACCT_ITEM_O "							              "  WHERE acct_item_id=%s "							              "    AND special_acct_flag='0'",derated,bill_serial_nbr,max_item_id);							//userlog(lsSql);							cDatabase->DoSql(lsSql);							isqlcode=cDatabase->GetSqlCode();							if(isqlcode<0)							{								strcpy(lsRetstr,cDatabase->GetSqlErrText());								cDatabase->Rollback();								strcpy(lsTemp,"插入帐期滞纳金减免出错");strcat(lsTemp,"\n");								if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsTemp,lsRetstr),lsErr)!=1)								{									strcat(lsTemp,lsErr);									cDatabase->Rollback();								}								else									cDatabase->Commit();								StrReturn(-1,lsTemp);							}							if(cDatabase->GetRowCount()!=1)							{								strcpy(lsTemp,"插入帐期滞纳金减免出错,插入数目不合");								cDatabase->Rollback();								if(WriteLog(cDatabase,StaffID,"w_p_charge",lsTemp,lsErr)!=1)								{									strcat(lsTemp,lsErr);									cDatabase->Rollback();								}								else									cDatabase->Commit();								StrReturn(-1,lsTemp);							}						}					}				}			}			if (change_type[0]=='1')			{				sprintf(charge,"%d",atol(charge)+atol(old_change)+atol(late_fee)-atol(derated));				sprintf(amount,"%d",atol(charge) / 100 * 100);				sprintf(new_change,"%d",atol(charge) - atol(amount));								if((balance - atol(amount))>0)				{					new_balance=balance-atol(amount);					balance=atol(amount);				}				else				{					new_balance=balance-balance/100*100;					balance=balance/100*100;				}								//sprintf(charge_total,"%d",atol(charge_total)+atol(amount));				charge_sum=charge_sum+atol(amount)-balance;				sprintf(lsTemp,"%lf",charge_sum);				                //userlog(lsTemp);												}			else			{				sprintf(charge,"%d",atol(charge)+atol(old_change)+atol(late_fee)-atol(derated));				sprintf(amount,"%d",atol(charge));				sprintf(new_change,"%d",0);				if(balance-atol(amount)>0)				{					new_balance=balance-atol(amount);					balance=atol(amount);				}				else				{					new_balance=0;				}				//sprintf(charge_total,"%d",atol(charge_total)+atol(amount));				charge_sum=charge_sum+atol(amount)- balance;			}			//userlog("charge_total=%s",charge_total);			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,new_change,billing_cycle_id)  "								"VALUES (%s,%s,sysdate,%s,sysdate,null,1,sysdate,null,null,  "										  "'40C',sysdate,%s,%s,%s,%s,%s,%s)",								bill_serial_nbr,pay_serial_nbs,StaffID,bill_serial_nbr,amount,								acct_id,old_change,new_change,billing_cycle_id);			//userlog(lsSql);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();                         			if(isqlcode<0)			{								strcpy(lsRetstr,cDatabase->GetSqlErrText());				cDatabase->Rollback();				strcpy(lsTemp,"插入销帐记录出错");strcat(lsTemp,"\n");				if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsTemp,lsRetstr),lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();				}				else					cDatabase->Commit();				StrReturn(-1,lsTemp);			}                         			if(cDatabase->GetRowCount()!=1)			{				strcpy(lsTemp,"插入销帐记录出错,插入数目不合");				cDatabase->Rollback();				if(WriteLog(cDatabase,StaffID,"w_p_charge",lsTemp,lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();				}				else					cDatabase->Commit();				StrReturn(-1,lsTemp);			}			sprintf(old_change,new_change);			sprintf(charge,"0");//			if(balance>0)//			{				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,billing_cycle_id )    "				"VALUES (SEQ_BALANCE_HIST_ADMIN.nextval,%s,-%ld,'3',  "				"%s,%ld,sysdate,'01',%s, %s)	  "				,acct_id,balance,StaffID,new_balance,bill_serial_nbr,billing_cycle_id);					//userlog(lsSql);				cDatabase->DoSql(lsSql);				isqlcode=cDatabase->GetSqlCode();	                         				if(isqlcode<0)				{										strcpy(lsRetstr,cDatabase->GetSqlErrText());					cDatabase->Rollback();					strcpy(lsTemp,"插入销帐记录出错");strcat(lsTemp,"\n");					if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsTemp,lsRetstr),lsErr)!=1)					{						strcat(lsTemp,lsErr);						cDatabase->Rollback();					}					else						cDatabase->Commit();					StrReturn(-1,lsTemp);				}	//			}				isqlcode=GetMaxBillNo(cDatabase,StaffID,bill_serial_nbr,lsTemp);			if(isqlcode<0)			{				strcpy(lsRetstr,lsTemp);				cDatabase->Rollback();				strcpy(lsTemp,"提取最大销帐流水号出错1");strcat(lsTemp,"\n");				if(WriteLog(cDatabase,StaffID,"w_p_charge",strcat(lsTemp,lsRetstr),lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();

⌨️ 快捷键说明

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