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

📄 charge_stat——0802.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
#include "charge_stat.h"
#include "payment.flds.h"

//-----------------------------------------------------------------
//构造函数
//-----------------------------------------------------------------

CStat::CStat(char *pcInp,COracle *pcDatabase)
{
	cDatabase = pcDatabase;
	pInp = pcInp;
}


//-----------------------------------------------------------------
//服务PSStaffBill实现函数,传入参数staff_id,start_date,end_date
//-----------------------------------------------------------------

void CStat::StaffBillList()
{
	char lsSql[2048],lsTemp[1024],lsErr[500];
	char *lparm[5],*lpret;
	char *lpwrite=NULL,*lperase=NULL,*lpbalance=NULL,*lpinstal=NULL,*lpbalerase=NULL;
	char staff_id[20],start_date[100],end_date[100];
	int i,isqlcode,lpnum,rpnum;
	int rt;
	long len=0,retlong=0;
	
	lpnum=3;	
	rpnum=GetInputParm(pInp,lparm,50);
	if(rpnum!=lpnum)
	{
		lpfree(lparm,rpnum);
		strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n");
		if(WriteLog(cDatabase,"-1","w_p_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-2,lsTemp);
	}

	strcpy(staff_id,lparm[0]);
	sprintf(start_date,"to_date('%s','yyyy-mm-dd hh24:mi:ss')",lparm[1]);
	sprintf(end_date,"to_date('%s','yyyy-mm-dd hh24:mi:ss')",lparm[2]);
	lpfree(lparm,rpnum);	
		
	
	//销帐数据检索
	sprintf(lsSql,
  "SELECT  '1',  "
          "'40C',  "
           "BILL.bill_serial_nbs ,  "
           "BILL.acct_id ,  "
           "B_ACCT.customer_name ,  "
           "BILL.amount/100,  "
           "BILL.area_code ,  "
           "B_ACCT.acc_nbr ,    "
           "to_char(BILL.created_date,'YYYY-MM-DD HH24:MI:SS') " 
        "FROM BILL ,  "
           "B_ACCT     "
        "WHERE ( BILL.acct_id = B_ACCT.acct_id(+)) and   "
          "( B_ACCT.state = '10A' or B_ACCT.state is null ) and   "
          "( BILL.staff_id = %s ) and   "
          "( BILL.state in ('40C','40R') ) and   "
          "( BILL.pay_date >= %s ) and   "
          "( BILL.pay_date < %s )   "
          ,staff_id,start_date,end_date);
	//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_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-1,lsTemp);
	}
	
	retlong=strlen(cDatabase->GetData());
	if(retlong>=1)
	{
		lpwrite=(char *)malloc(retlong+1);
		strcpy(lpwrite,cDatabase->ret);
		len=strlen(lpwrite);
	}
       // //userlog(lpwrite);
		
	//反销数据检索
	sprintf(lsSql,
  "SELECT  '1',  "
          "'40R',  "
           "BILL.bill_serial_nbs ,  "
           "BILL.acct_id ,  "
           "B_ACCT.customer_name ,   "
           "-BILL.amount/100,  "
           "BILL.area_code ,  "
           "B_ACCT.acc_nbr  ,   "
           "to_char(BILL.created_date,'YYYY-MM-DD HH24:MI:SS') "           
        "FROM BILL ,  "
           "B_ACCT      "
        "WHERE ( BILL.acct_id = B_ACCT.acct_id(+)) and  "
          "( B_ACCT.state = '10A' or B_ACCT.state is null ) and  "
          "( BILL.staff_id = %s ) and   "
          "( BILL.state = '40R' ) and   "
          "( BILL.pay_date >= %s ) and   "
          "( BILL.pay_date < %s )    "
	,staff_id,start_date,end_date);
	
	//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_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-1,lsTemp);
	}
	
	retlong=strlen(cDatabase->GetData());
	if(retlong>=1)
	{
		lperase=(char *)malloc(retlong+1);
		strcpy(lperase,cDatabase->ret);
		len=len+strlen(lperase);
	}


	//预付款数据检索
	sprintf(lsSql,
  "SELECT '2', "
          "BALANCE_HIST_ADMIN.use_catg, "
	 "BALANCE_HIST_ADMIN.balance_hist_admin_id,   "
         "BALANCE_HIST_ADMIN.acct_id,   "
         "B_ACCT.customer_name,   "
         "BALANCE_HIST_ADMIN.amount/100,   "
         "'',  "
         "B_ACCT.acc_nbr,   "
         "to_char(use_date,'YYYY-MM-DD HH24:MI:SS') "
    "FROM BALANCE_HIST_ADMIN,   "
         "B_ACCT  "
   "WHERE ( BALANCE_HIST_ADMIN.acct_id = B_ACCT.acct_id(+) ) and   "
         "( BALANCE_HIST_ADMIN.use_catg in ('1','2','3') ) and  "
         "( B_ACCT.state='10A' ) and "
         "( ( BALANCE_HIST_ADMIN.staff_id = %s ) AND "
         "( BALANCE_HIST_ADMIN.use_date >= %s) AND "
         "( BALANCE_HIST_ADMIN.use_date < %s ) ) "
         " order by BALANCE_HIST_ADMIN.use_catg asc "
	,staff_id,start_date,end_date);
	
	//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_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-1,lsTemp);
	}
	retlong=strlen(cDatabase->GetData());
	if(retlong>=1)
	{
		lpbalance=(char *)malloc(retlong+1);
		strcpy(lpbalance,cDatabase->ret);
		//userlog(lpbalance);
		len=len+strlen(lpbalance);
	}
	
  //预付款返销数据检索
  sprintf(lsSql,
  "SELECT '2', "
         "BALANCE_HIST_ADMIN.state, "
	 "BALANCE_HIST_ADMIN.balance_hist_admin_id,   "
         "BALANCE_HIST_ADMIN.acct_id,   "
         "B_ACCT.customer_name,   "
         " - BALANCE_HIST_ADMIN.amount/100,   "
         "'',  "
         "B_ACCT.acc_nbr,   "
         "to_char(use_date,'YYYY-MM-DD HH24:MI:SS') "
    "FROM BALANCE_HIST_ADMIN,   "
         "B_ACCT  "
   "WHERE ( BALANCE_HIST_ADMIN.acct_id = B_ACCT.acct_id(+) ) and   "
         "( BALANCE_HIST_ADMIN.use_catg in ('1','2','3') ) and  "
         "( B_ACCT.state='10A' ) and "
         "( BALANCE_HIST_ADMIN.state='02') and"
         "( ( BALANCE_HIST_ADMIN.staff_id = %s ) AND "
         "( BALANCE_HIST_ADMIN.use_date >= %s) AND "
         "( BALANCE_HIST_ADMIN.use_date < %s ) ) "
         " order by BALANCE_HIST_ADMIN.use_catg asc "
	,staff_id,start_date,end_date);
	
	//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_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-1,lsTemp);
	}
	retlong=strlen(cDatabase->GetData());
	if(retlong>=1)
	{
		lpbalerase=(char *)malloc(retlong+1);
		strcpy(lpbalerase,cDatabase->ret);
		//userlog(lpbalance);
		len=len+strlen(lpbalerase);
	}
	
	//分期付款数据检索
	sprintf(lsSql,
	 "SELECT '3',   "
         "INSTALMENT_BALANCE.operation_type,     "
			"INSTALMENT_BALANCE.instalment_his_id,   "
         "INSTALMENT_BALANCE.acct_id,   "
         "B_ACCT.customer_name,   "
         "INSTALMENT_BALANCE.charge_current/100,   "
         "'',   "
         "B_ACCT.acc_nbr,	"
       	 "to_char(INSTALMENT_BALANCE.state_date,'YYYY-MM-DD HH24:MI:SS') "
    "FROM INSTALMENT_BALANCE,   "
         "B_ACCT  "
   "WHERE ( INSTALMENT_BALANCE.acct_id = B_ACCT.acct_id(+) ) and   "
         "( INSTALMENT_BALANCE.operation_type in ( '01','04','05') ) and  "
         "( B_ACCT.state='10A') and "
         "( ( INSTALMENT_BALANCE.staff_id = %s ) AND    "
         "( INSTALMENT_BALANCE.state_date >= %s ) AND  "
         "( INSTALMENT_BALANCE.state_date < %s ) )    "
	,staff_id,start_date,end_date);
	
	//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_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-1,lsTemp);
	}	
	retlong=strlen(cDatabase->GetData());
	if(retlong>=1)
	{
		lpinstal=(char *)malloc(retlong+1);
		strcpy(lpinstal,cDatabase->ret);
		len=len+strlen(lpinstal);
	}
	//构造返回数据字符串
	if (cDatabase->ret) free(cDatabase->ret);
	
	cDatabase->ret=(char *)malloc(len+10);

	memset(cDatabase->ret,0,len+10);
   
	if(lpwrite)
	{
		strcat(cDatabase->ret,lpwrite);
		strcat(cDatabase->ret,"\r\n");
	}
      
	if(lperase)
	{
		strcat(cDatabase->ret,lperase);
		strcat(cDatabase->ret,"\r\n");
	}

	if(lpbalance)
	{
		strcat(cDatabase->ret,lpbalance);
		strcat(cDatabase->ret,"\r\n");
	}
	
        if(lpbalerase)
        {
        	strcat(cDatabase->ret,lpbalerase);
        	strcat(cDatabase->ret,"\r\n");
        }
        
	strcat(cDatabase->ret,lpinstal);
     
	if (lpwrite) free(lpwrite);
	if (lperase) free(lperase);
	if (lpbalance) free(lpbalance);
	if (lpbalerase) free(lpbalerase);
	if (lpinstal) free(lpinstal);

	if(cDatabase->ret==NULL)
	{
		cDatabase->Commit();
		free(cDatabase->ret);
		StrReturn(100,NULL);
	}
   
	StrReturn(0,cDatabase->ret);
	
//	free(lpret);	
}


//-----------------------------------------------------------------
//服务PSStaffStat实现函数,传入参数staff_id,start_date,end_date
//-----------------------------------------------------------------

void CStat::StaffStat()
{
	char lsSql[2048],lsTemp[1024],lsErr[500],lstmp[20];
	char *lparm[5];
	char staff_id[40],start_date[100],end_date[100];
	int i,isqlcode,lpnum,rpnum;
	int rt,retlong;
	long len;
	
	//统计对象变量声明
	char *write_amount,*write_number,*erase_amount,*erase_number;	
	char *bal_amount,*bal_number,*instal_amount,*instal_number;
	char *cash_amount,*cash_number,*card_amount,*card_number;
	char *check_amount,*check_number,*bal_erase,*bal_erasenum; 
/*	char write_amount[20],write_number[20],erase_amount[20],erase_number[20];	
	char bal_amount[20],bal_number[20],instal_amount[20],instal_number[20];
	char cash_amount[20],cash_number[20],card_amount[20],card_number[20];
	char check_amount[20],check_number[20];*/
	
        char *late_amount;  // 违约金
	lpnum=3;	
	rpnum=GetInputParm(pInp,lparm,50);
	if(rpnum!=lpnum)
	{
		lpfree(lparm,rpnum);
		strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n");
		if(WriteLog(cDatabase,"-1","w_p_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-2,lsTemp);
	}

	sprintf(staff_id,"%s",lparm[0]);
	sprintf(start_date,"to_date('%s','yyyy-mm-dd hh24:mi:ss')",lparm[1]);
	sprintf(end_date,"to_date('%s','yyyy-mm-dd hh24:mi:ss')",lparm[2]);
	lpfree(lparm,rpnum);	
		
	
	//销帐统计
	sprintf(lsSql,
	"SELECT NVL(sum(BILL.amount/100.00),0),NVL(count(DISTINCT BILL.acct_id),0)  "
	"FROM BILL  "
	"WHERE BILL.state in ('40C','40R') AND  "
		"BILL.staff_id = %s AND  "
		"BILL.pay_date >= %s AND  "
		"BILL.pay_date < %s  "
          ,staff_id,start_date,end_date);
	
//	//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_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-1,lsTemp);
	}
	
	retlong = strlen(cDatabase->data->GetColData(1,1));
	write_amount = (char *) malloc(retlong+1);
	strcpy(write_amount,cDatabase->data->GetColData(1,1));
	retlong = strlen(cDatabase->data->GetColData(1,2));
	write_number = (char *) malloc(retlong+1);
	strcpy(write_number,cDatabase->data->GetColData(1,2));
	
	//反销统计
	sprintf(lsSql,
	"SELECT NVL(sum(BILL.amount/100.00),0),NVL(count(DISTINCT BILL.acct_id),0)  "
	"FROM BILL  "
	"WHERE BILL.state = '40R' AND  "
		"BILL.staff_id = %s AND   "
		"BILL.pay_date >= %s AND  "
		"BILL.pay_date < %s   "
          ,staff_id,start_date,end_date);
	
	////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_sta_dayreport",lsTemp,lsErr)!=1)
			strcat(lsTemp,lsErr);
		cDatabase->Commit();
		StrReturn(-1,lsTemp);
	}
	
	retlong = strlen(cDatabase->data->GetColData(1,1));
	erase_amount = (char *) malloc(retlong+1);
	strcpy(erase_amount,cDatabase->data->GetColData(1,1));
	retlong = strlen(cDatabase->data->GetColData(1,2));
	erase_number = (char *) malloc(retlong+1);
	strcpy(erase_number,cDatabase->data->GetColData(1,2));
	
	//////////////////////////////////////////////////////////////
	//违约金统计
	sprintf(lsSql,
	"SELECT NVL(sum(B_ACCT_ITEM_O.charge/100.00),0)  "
	"FROM BILL,B_ACCT_ITEM_O "
	"WHERE BILL.state = '40C' AND  "
		"BILL.staff_id = %s AND   "
		"BILL.pay_date >= %s AND  "
		"BILL.pay_date < %s  AND  "
		"BILL.bill_serial_nbr = B_ACCT_ITEM_O.bill_serial_nbr AND "
		"B_ACCT_ITEM_O.acct_item_type_id=1"
          ,staff_id,start_date,end_date);
	
	////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_sta_dayreport",lsTemp,lsErr)!=1)

⌨️ 快捷键说明

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