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

📄 charge_installment.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
字号:
#include "charge_installment.h"#include "payment.flds.h"//-----------------------------------------------------------------//构造函数//-----------------------------------------------------------------CInstallment::CInstallment(char *pcInp,COracle *pcDatabase){	cDatabase = pcDatabase;	pInp = pcInp;}//-----------------------------------------------------------------//服务PIGetIns实现函数,传入参数staff_id,acct_id,acct_item_type_id//取帐户分期付款信息//-----------------------------------------------------------------void CInstallment::GetInsInfoAcct(){	char lsSql[2048],lsTemp[1024],lsErr[500];	char staff_id[20],acct_id[20],itypeid[20];	int isqlcode,lrow;	char pstate[10];	char *lparm[3];		int i,lpnum,rpnum;			lpnum=3;		rpnum=GetInputParm(pInp,lparm,50);	if(rpnum!=lpnum)	{		lpfree(lparm,rpnum);		strcpy(lsTemp,"解析客户端传入参数失败,可能参数数据或传输格式不正确!\n");		if(WriteLog(cDatabase,"-1","w_p_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);	}	strcpy(staff_id,lparm[0]);	strcpy(acct_id,lparm[1]);		strcpy(itypeid,lparm[2]);	lpfree(lparm,rpnum);						//取用户帐户及分期付款信息	sprintf(lsSql,  "SELECT INSTALMENT_BALANCE.acct_item_type_id,"         "INSTALMENT_BALANCE.charge_sum,"         "INSTALMENT_BALANCE.charge_current,"         "INSTALMENT_BALANCE.state,"         "B_ACCT.acct_id,"         "B_ACCT.payment_method,"         "B_ACCT.customer_name,"         "B_ADDRESS.detail,"			"B_ACCT_ITEM_TYPE_O.name  "    "FROM INSTALMENT_BALANCE,  "         "B_ACCT, "		"	B_ADDRESS, "			"B_ACCT_ITEM_TYPE_O  "   "WHERE ( INSTALMENT_BALANCE.acct_id(+) = B_ACCT.acct_id) and  "			"( B_ACCT.address_id = B_ADDRESS.address_id(+) ) and  "         "( B_ACCT.acct_id = %s ) AND  "         "( B_ACCT.state = '10A' ) AND  "         "( INSTALMENT_BALANCE.state = '01' ) AND  "         "( INSTALMENT_BALANCE.acct_item_type_id = %s ) and  "	 "( B_ACCT_ITEM_TYPE_O.acct_item_type_id = %s )  "	 ,acct_id,itypeid,itypeid );		//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_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}	lrow=cDatabase->GetRowCount();	if(lrow==0) StrReturn(100,"合同号不存在!");	if(lrow>1) 	{		strcpy(lsTemp,"取分期付款信息出错,检索出多排信息记录!");		if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);			}	cDatabase->Commit();	StrReturn(0,cDatabase->GetData());		 	}	//------------------------------------------------------------------------//服务PISaveIns实现函数,分期付款存取//传入参数staff_id,acct_id,acct_item_type_id,amount//注解:ls_conduct为对INSTALMENT_BALANCE操作类型//ls_optype为对PAYMENT操作类型//------------------------------------------------------------------------void CInstallment::SaveInsInfo(){	char lsSql[2048],lsTemp[1024],lsErr[500];	char *lparm[10];	char staff_id[20],acct_id[20],acct_seq_nbr[4],itypeid[10];	char ls_amount[20],paymaxno[30],systime[20];	double amount,charge_sum,charge_current;	char ls_conduct[2],ls_optype[4];	int i,isqlcode,lpnum,rpnum;	int rt,lrow;		lpnum=4;		rpnum=GetInputParm(pInp,lparm,50);	if(rpnum!=lpnum)	{		lpfree(lparm,rpnum);		strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n");		if(WriteLog(cDatabase,"-1","w_p_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);	}	strcpy(staff_id,lparm[0]);	strcpy(acct_id,lparm[1]);	strcpy(itypeid,lparm[2]);	strcpy(ls_amount,lparm[3]);	amount=atof(ls_amount);		lpfree(lparm,rpnum);			if(amount>0)	{		strcpy(ls_conduct,"01");		strcpy(ls_optype,"10");	}	else {		strcpy(ls_conduct,"05");		strcpy(ls_optype,"30");	}				cDatabase->BeginTran();		//检查合同号	sprintf(lsSql,	"SELECT acct_id,acct_seq_nbr,tochar(sysdate,'yyyy-mm-dd')  "		"FROM B_ACCT  "	"WHERE acct_id = %s AND   "		"state = '10A' AND  "		"payment_method IN ('11','12','13')  "	,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");		if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}	lrow=cDatabase->GetRowCount();	if(lrow!=1)	{		if(lrow==0) StrReturn(100,"合同号不存在或该帐户的付款方式不属于前台交纳!");		else	{		strcpy(lsTemp,"合同号对应档案不唯一!\n");		if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);				}	}	strcpy(acct_seq_nbr,cDatabase->data->GetColData(1,2));	strcpy(systime,cDatabase->data->GetColData(1,3));			//从INSTALMENT_BALANCE表中检索数据	sprintf(lsSql,	"SELECT NVL(charge_sum,0), NVL(charge_current,0)   "		"FROM INSTALMENT_BALANCE  "	"WHERE acct_id = %s AND  "		"state = '01' AND  "		"acct_item_type_id = %s "	,acct_id,itypeid);		//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());	//userlog("检索返回行数:%d",cDatabase->GetRowCount());		lrow=cDatabase->GetRowCount();	if(isqlcode<0 || lrow>1 ) 	{			strcpy(lsTemp,"从INSTALMENT_BALANCE表中检索数据时出错!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}	if(lrow==0) 	{		//INSTALMENT_BALANCE表中无该合同号记录,增加之		if(amount<0) StrReturn(100,"帐目类型的第一次分期付款金额不能为负!");				sprintf(lsSql,   		"INSERT INTO INSTALMENT_BALANCE   "          		"(acct_id,   "           		"acct_item_type_id,   "           		"charge_sum,   "           		"charge_current,   "          		"operation_type,  "           		"state_date,   "           		"state,   "           		"staff_id )  "   		"VALUES (%s,   "           		"%s,   "           		"0,   "           		"%f,   "           		"'%s',   "           		"sysdate,   "           		"'01', "           		"%s)	"		,acct_id,itypeid,amount,ls_conduct,staff_id);				//userlog(lsSql);		cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();		//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());			if(isqlcode<0) 		{				strcpy(lsTemp,"向INSTALMENT_BALANCE表中插入记录时出错!\n");			strcat(lsTemp,cDatabase->GetSqlErrText());			strcat(lsTemp,"\n");			cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			StrReturn(-1,lsTemp);		}					}else	{		//INSTALMENT_BALANCE表有该合同号记录,更新之		charge_sum=atof(cDatabase->data->GetColData(1,1));		charge_current=atof(cDatabase->data->GetColData(1,2));			if(amount<0 && amount+charge_sum+charge_current<0)		{			sprintf(lsTemp,"输入的冲帐金额大于了该帐目类型现有预付款(%10.2f元),不能冲帐!",				(charge_sum+charge_current)/100);			StrReturn(-2,lsTemp);		}				//更新INSTALMENT_BALANCE表中数据		sprintf(lsSql,		"UPDATE INSTALMENT_BALANCE  "		"SET state_date = sysdate,   "			 "state = '02' "    		"WHERE acct_id = %s AND  "		    "state = '01' AND  "		    "acct_item_type_id = %s  "		,acct_id,itypeid );			//userlog(lsSql);		cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();		//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());			if(isqlcode<0||cDatabase->GetRowCount()!=1)		{				strcpy(lsTemp,"更新INSTALMENT_BALANCE表中数据时出错!\n");			strcat(lsTemp,cDatabase->GetSqlErrText());			strcat(lsTemp,"\n");			cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			StrReturn(-1,lsTemp);		}				//向INSTALMENT_BALANCE表中插入记录		sprintf(lsSql,   		"INSERT INTO INSTALMENT_BALANCE   "          		"(acct_id,   "           		"acct_item_type_id,   "           		"charge_sum,   "           		"charge_current,   "          		"operation_type,  "           		"state_date,   "           		"state,   "           		"staff_id )  "   		"VALUES (%s,   "           		"%s,   "           		"%f,   "           		"%f,   "           		"'%s',   "           		"sysdate,   "           		"'01', "           		"%s) "		,acct_id,itypeid,charge_sum+charge_current,amount,ls_conduct,staff_id);				//userlog(lsSql);		cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();		//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());			if(isqlcode<0) 		{				strcpy(lsTemp,"向INSTALMENT_BALANCE表中插入新记录时出错!\n");			strcat(lsTemp,cDatabase->GetSqlErrText());			strcat(lsTemp,"\n");			cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_installment",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_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);	}		//userlog(paymaxno);		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,'11','%s',  "	"null,%f, sysdate,%s,'C0C',sysdate,'','')  "	,paymaxno,acct_id,acct_seq_nbr,ls_optype,amount,staff_id);		//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_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		cDatabase->Commit();		//存取成功将系统时间返回	StrReturn(0,systime);		}//------------------------------------------------------------------------//服务PIPrintIv实现函数,分期付款收据打印//传入参数staff_id,acct_id,acct_item_type_id,use_date//------------------------------------------------------------------------void CInstallment::GetPrintInfo(){	char lsSql[2048],lsSqltmp[200],lsTemp[1024],lsErr[500];	char *lparm[10];	char staff_id[20],acct_id[20],itypeid[10];	char use_date[20],systime[20];	int i,isqlcode,lpnum,rpnum;	int rt;		lpnum=4;		rpnum=GetInputParm(pInp,lparm,50);	if(rpnum!=lpnum)	{		lpfree(lparm,rpnum);		strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n");		if(WriteLog(cDatabase,"-1","w_p_installment",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_id,lparm[1]);	strcpy(itypeid,lparm[2]);	strcpy(use_date,lparm[3]);	lpfree(lparm,rpnum);				//取收据信息	sprintf(lsSql,  "SELECT INSTALMENT_BALANCE.acct_id,    "         "INSTALMENT_BALANCE.acct_item_type_id,  "	 "INSTALMENT_BALANCE.operation_type,  "         "(INSTALMENT_BALANCE.charge_sum+INSTALMENT_BALANCE.charge_current)/100.00 charge_sum,    "         "INSTALMENT_BALANCE.charge_current/100.00 charge_current,   "         "to_char(INSTALMENT_BALANCE.state_date,'yyyy-mm-dd'),   "         "INSTALMENT_BALANCE.staff_id  "    "FROM INSTALMENT_BALANCE  "   "WHERE ( INSTALMENT_BALANCE.acct_id = %s ) AND  "         "( INSTALMENT_BALANCE.acct_item_type_id = %s ) AND  "         "( to_char(INSTALMENT_BALANCE.state_date,'yyyymmdd') = '%s' ) AND  "         "( INSTALMENT_BALANCE.staff_id = %s ) AND  "	 "( INSTALMENT_BALANCE.state = '01' ) AND  "	 "( INSTALMENT_BALANCE.operation_type = '01' )	"	,acct_id,itypeid,use_date,staff_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_installment",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}	cDatabase->Commit();		if(isqlcode==0 && cDatabase->GetRowCount()==0) StrReturn(100,NULL);		StrReturn(0,cDatabase->GetData());		}

⌨️ 快捷键说明

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