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

📄 charge_sell.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			"FROM	(SELECT serv_id,null,min(bill_serial_nbr),min(billing_cycle_id),sysdate,'0'  "			"FROM B_ACCT_ITEM_O  "			"WHERE bill_serial_nbr in (SELECT bill_serial_nbr FROM B_ACCT_ITEM_SELL "			"			WHERE staff_id=%s and created_billing_cycle_id=%s and state='S0C') AND "			"		state in ('20R','20U') AND serv_id is not null "			"GROUP BY serv_id) aa",		StaffID,CBillingCycleID);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	if(isqlcode<0)	{		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"插入复机数据失败");strcat(lsTemp,"\n");		if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		sell_list.FreeList(1);		StrReturn(-1,lsTemp);	}	sprintf(lsSql,"UPDATE B_ACCT_ITEM_SELL SET state='S0P',pay_date=sysdate WHERE staff_id=%s AND created_billing_cycle_id=%s AND state='S0C'",		StaffID,CBillingCycleID);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	if(isqlcode<0)	{		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"更新批量销帐中间表2失败");strcat(lsTemp,"\n");		if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		sell_list.FreeList(1);		StrReturn(-1,lsTemp);	}	        sprintf(lsSql,"select count(*),sum(charge/100) from b_acct_item_sell "                      " where staff_id=%s AND created_billing_cycle_id=%s AND state='S0P' AND "			" acc_nbr BETWEEN '%s' AND '%s' AND sell_id=%s"          ,StaffID,CBillingCycleID,StartNbr,EndNbr,SellID);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();     	if(isqlcode<0)	{		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"提取销账总计出错!");strcat(lsTemp,"\n");		if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		sell_list.FreeList(1);		StrReturn(-1,lsTemp);	}	cDatabase->Commit();	sell_list.FreeList(1);	StrReturn(0,cDatabase->GetData());	}void CSell::SellErase(char *StaffID,char *CBillingCycleID,char *StartNbr,char *EndNbr,char *SellID){	char lsSql[600],lsTemp[1024],lsErr[500],lsRetstr[500],pay_serial_nbr[19];	int isqlcode,lrow,lrow_cur;	char acct_id[9],billing_cycle_id[7],charge[11],bill_serial_nbr[19];	sprintf(lsSql,"SELECT bill_serial_nbr FROM B_ACCT_ITEM_SELL "			"WHERE staff_id=%s AND created_billing_cycle_id=%s AND state='S0P' AND "			"	acc_nbr BETWEEN '%s' AND '%s' AND sell_id=%s"			"ORDER BY bill_serial_nbr DESC ",			StaffID,CBillingCycleID,StartNbr,EndNbr,SellID);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	if(isqlcode<0)	{		strcpy(lsRetstr,lsTemp);		cDatabase->Rollback();		strcpy(lsTemp,"提取批量反销游标失败");strcat(lsTemp,"\n");		if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		StrReturn(-1,lsTemp);	}		if(cDatabase->GetRowCount()==0)	{		strcpy(lsTemp,"没有找到批量反销数据");		cDatabase->Rollback();		if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)		{			strcat(lsTemp,lsErr);			cDatabase->Rollback();		}		else			cDatabase->Commit();		StrReturn(100,lsTemp);	}	SupListT<EraseStruct> erase_list; 		lrow=cDatabase->GetRowCount();	for(long i=0;i<lrow;i++)	{		EraseStruct *psell=new EraseStruct;		strcpy(psell->bill_serial_nbr,cDatabase->data->GetColData(i+1,1));		erase_list.AddTail(psell);	}	erase_list.SeekHead();	for(int i=0;i<erase_list.GetCount();i++)	{		EraseStruct *mysell=erase_list.GetNext();		rtrim(ltrim(strcpy(bill_serial_nbr,mysell->bill_serial_nbr)));		sprintf(lsSql,"SELECT count(b.bill_serial_nbr) FROM BILL a,BILL b WHERE a.bill_serial_nbr = %s AND b.acct_id = a.acct_id AND b.state_date > a.state_date AND b.state = '40C'",bill_serial_nbr);			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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			erase_list.FreeList(1);			StrReturn(-1,lsTemp);		}			sprintf(lsTemp,cDatabase->GetData());		if(atol(lsTemp)>0)		{			cDatabase->Rollback();			erase_list.FreeList(1);			StrReturn(-1,"只能反销最近的一次销帐!");		}			sprintf(lsSql,"SELECT count(b.bill_serial_nbr) FROM BILL a,BILL b WHERE a.bill_serial_nbr = %s AND b.acct_id = a.acct_id AND b.staff_id = a.staff_id AND b.state_date = a.state_date AND b.bill_serial_nbr > %s AND b.state = '40C'",bill_serial_nbr,bill_serial_nbr);			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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			erase_list.FreeList(1);			StrReturn(-1,lsTemp);		}			sprintf(lsTemp,cDatabase->GetData());		if(atol(lsTemp)>0)		{			cDatabase->Rollback();			erase_list.FreeList(1);			StrReturn(-1,"只能反销最近的一次销帐!");		}			cDatabase->BeginTran();			sprintf(lsSql," UPDATE B_ACCT_ITEM_O "		                 " SET state=decode(state,'20P','20C','20R','20Q','20X','20T','20U','20Y','20W','20S','20V','20Z',state) "		               " WHERE bill_serial_nbr = %s "		                 " AND state in ('20P','20R','20X','20U','20W','20V')"		,bill_serial_nbr);			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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)			{				strcat(lsTemp,lsErr);				cDatabase->Rollback();			}			else				cDatabase->Commit();			erase_list.FreeList(1);			StrReturn(-1,lsTemp);		}				if(cDatabase->GetRowCount()==0)		{			strcpy(lsTemp,"修改帐目状态出错,没有帐目被修改");			cDatabase->Rollback();			if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)			{				strcat(lsTemp,lsErr);				cDatabase->Rollback();			}			else				cDatabase->Commit();			erase_list.FreeList(1);			StrReturn(-1,lsTemp);		}				sprintf(lsSql,"SELECT acct_id,billing_cycle_id,charge FROM B_ACCT_ITEM_O WHERE bill_serial_nbr=%s AND acct_item_type_id = 999999",bill_serial_nbr);				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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)			{				strcat(lsTemp,lsErr);				cDatabase->Rollback();			}			else				cDatabase->Commit();			erase_list.FreeList(1);			StrReturn(-1,lsTemp);		}				if(cDatabase->GetRowCount()==1)		{			rtrim(ltrim(strcpy(acct_id,cDatabase->data->GetColData(1,1))));			rtrim(ltrim(strcpy(billing_cycle_id,cDatabase->data->GetColData(1,2))));			rtrim(ltrim(strcpy(charge,cDatabase->data->GetColData(1,3))));						sprintf(lsSql,"INSERT INTO BALANCE_HIST_ADMIN "				      "SELECT SEQ_BALANCE_HIST_ADMIN.NEXTVAL,acct_id,(-1)*amount,'4',%s,balance-amount,sysdate,billing_cycle_id,'01' "				      "FROM BALANCE_HIST_ADMIN WHERE balance_hist_admin_id IN (SELECT max(balance_hist_admin_id) FROM BALANCE_HIST_ADMIN "				      "							       WHERE acct_id=%s AND billing_cycle_id=%s AND use_catg='3') ",				StaffID,acct_id,billing_cycle_id);				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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();				}				else					cDatabase->Commit();				erase_list.FreeList(1);				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();				erase_list.FreeList(1);				StrReturn(-1,lsTemp);			}						sprintf(lsSql,"UPDATE BALANCE_TABLE_ADMIN SET total_amount=total_amount-(%s),state_date=sysdate WHERE acct_id=%s AND state='1'",charge,acct_id);				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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();				}				else					cDatabase->Commit();				erase_list.FreeList(1);				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();				erase_list.FreeList(1);				StrReturn(-1,lsTemp);			}				sprintf(lsSql,"UPDATE LBAS.ACCT SET balance=balance-(%s) WHERE acct_id=%s AND state='10A'",charge,acct_id);					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();				erase_list.FreeList(1);				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();				erase_list.FreeList(1);				StrReturn(-1,lsTemp);			}					sprintf(lsSql,"UPDATE B_ACCT SET balance=balance-(%s) WHERE acct_id=%s AND state='10A'",charge,acct_id);					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();				erase_list.FreeList(1);				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();				erase_list.FreeList(1);				StrReturn(-1,lsTemp);			}						sprintf(lsSql,"DELETE B_ACCT_ITEM_O WHERE bill_serial_nbr=%s AND acct_item_type_id = 999999",bill_serial_nbr);				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();				erase_list.FreeList(1);				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();				erase_list.FreeList(1);				StrReturn(-1,lsTemp);			}		}			sprintf(lsSql,"DELETE B_ACCT_ITEM_O  WHERE bill_serial_nbr = %s AND acct_item_type_id = 1",bill_serial_nbr);			cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();

⌨️ 快捷键说明

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