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

📄 charge_sell.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					acct_id,billing_cycle_id);						cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();			if(isqlcode<0)			{				cDatabase->Rollback();				strcpy(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");				strcpy(lsRetstr,"提取后台滞纳金减免定义出错");				if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsRetstr,lsTemp),lsErr)!=1)					strcat(lsTemp,lsErr);				cDatabase->Commit();				sell_list.FreeList(1);				StrReturn(-1,lsTemp);			}			lrow=cDatabase->GetRowCount();						if(lrow==1) 			{				rtrim(ltrim(strcpy(derated_type,cDatabase->data->GetColData(1,1))));				rtrim(ltrim(strcpy(derated_value,cDatabase->data->GetColData(1,2))));								switch (atoi(derated_type))				{					case 1:						if(atol(derated_value)>atol(late_fee))							sprintf(derate,late_fee);						else							sprintf(derate,derated_value);						break;					case 2:						if(atol(derated_value)>100)							sprintf(derated_value,"%d",100);						sprintf(derate,"%.0f",atol(late_fee)*atol(derated_value)*0.01);						break;					case 3:						if(atol(derated_value)>atol(due_date))							sprintf(derated_value,due_date);						sprintf(derate,"%.0f",atol(late_fee)*0.01*100*atol(derated_value)/atol(due_date));						break;					default:						sprintf(derate,"%d",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'",				        derate,bill_serial_nbs,acct_item_id);                                //userlog(lsSql);				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);				}								if(cDatabase->GetRowCount()!=1)				{					strcpy(lsTemp,"插入滞纳金减免失败,插入数目不合");					cDatabase->Rollback();					if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)					{						strcat(lsTemp,lsErr);						cDatabase->Rollback();					}					else						cDatabase->Commit();					sell_list.FreeList(1);					StrReturn(-1,lsTemp);				}			}				}				sprintf(total_charge,"%d",atol(charge)+atol(last_change)+atol(late_fee)-atol(derate));		if(atoi(Balance)==1&&atol(last_balance)!=0&&atol(total_charge)!=0)		{			if(atol(total_charge)<atol(last_balance))			{				sprintf(last_balance,"%d",atol(last_balance)-atol(total_charge));				sprintf(balance,total_charge);				sprintf(total_charge,"%d",0);			}			else			{				sprintf(balance,last_balance);				sprintf(total_charge,"%d",atol(total_charge)-atol(balance));				sprintf(last_balance,"%d",0);			}						sprintf(lsSql," INSERT INTO B_ACCT_ITEM_O "			              " SELECT acct_item_id,serv_id,serv_seq_nbr,acct_id,acct_seq_nbr,999999,(-1)*%s,"			              "        billing_cycle_id,sysdate,1,'20P',sysdate,0,0,999999,999999,%s,'4' "			              "   FROM B_ACCT_ITEM_O "			              "  WHERE acct_item_id=%s AND special_acct_flag='0'",			        balance,bill_serial_nbs,acct_item_id);			//userlog(lsSql);			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);			}						if(cDatabase->GetRowCount()!=1)			{				strcpy(lsTemp,"插入预付款抵消帐目失败,插入数目不合");				cDatabase->Rollback();				if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();				}				else					cDatabase->Commit();				sell_list.FreeList(1);				StrReturn(-1,lsTemp);			}			sprintf(lsSql,"  INSERT INTO BALANCE_HIST_ADMIN  "				      " ( balance_hist_admin_id,acct_id,amount,use_catg,staff_id,balance,use_date,billing_cycle_id,state )  "				      " VALUES (SEQ_BALANCE_HIST_ADMIN.NEXTVAL,%s,(-1)*%s,'3',%s,%s,sysdate,%s,'01')",				acct_id,balance,StaffID,last_balance,billing_cycle_id);                        			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);			}			if(cDatabase->GetRowCount()!=1)			{				strcpy(lsTemp,"插入预付费历史表失败,插入数目不合");				cDatabase->Rollback();				if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();				}				else					cDatabase->Commit();				sell_list.FreeList(1);				StrReturn(-1,lsTemp);			}			sprintf(lsSql,"UPDATE BALANCE_TABLE_ADMIN SET total_amount=%s,state_date=sysdate WHERE acct_id=%s AND state='1'",last_balance,acct_id);						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);			}						if(cDatabase->GetRowCount()!=1)			{				strcpy(lsTemp,"更新预付费台帐表失败,更新数目不合");				cDatabase->Rollback();				if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)				{					strcat(lsTemp,lsErr);					cDatabase->Rollback();				}				else					cDatabase->Commit();				sell_list.FreeList(1);				StrReturn(-1,lsTemp);			}		}		else		{			sprintf(balance,"%d",0);			//sprintf(last_balance,"%d",0);		}				if(atoi(Change)==1)		{			sprintf(amount,"%d",atol(total_charge) / 100 * 100);			sprintf(change,"%d",atol(total_charge) - atol(amount));		}		else		{			sprintf(amount,total_charge);			sprintf(change,"%d",0);		}				sprintf(lsSql,"UPDATE LBAS.ACCT SET change=%s,balance=%s WHERE acct_id=%s AND state='10A'",change,last_balance,acct_id);				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);		}				if(cDatabase->GetRowCount()!=1)		{			strcpy(lsTemp,"更新计费库零钞和预付费失败,更新数目不合");			cDatabase->Rollback();			if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)			{				strcat(lsTemp,lsErr);				cDatabase->Rollback();			}			else				cDatabase->Commit();			sell_list.FreeList(1);			StrReturn(-1,lsTemp);		}		sprintf(lsSql,"UPDATE B_ACCT SET change=%s,balance=%s WHERE acct_id=%s AND state='10A'",change,last_balance,acct_id);				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);		}				if(cDatabase->GetRowCount()!=1)		{			strcpy(lsTemp,"更新收费库零钞和预付费失败,更新数目不合");			cDatabase->Rollback();			if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)			{				strcat(lsTemp,lsErr);				cDatabase->Rollback();			}			else				cDatabase->Commit();			sell_list.FreeList(1);			StrReturn(-1,lsTemp);		}				sprintf(lsSql," UPDATE B_ACCT_ITEM_O "		                 " SET state=decode(state,'20C','20P','20Q','20R','20T','20X','20Y','20U','20S','20W','20Z','20V',state),"		                     " state_date=sysdate,"		                     " bill_serial_nbr=%s "		               " WHERE acct_id = %s "		                 " AND billing_cycle_id = %s "		                 " AND state in ('20C','20Q','20T','20Y','20S','20Z')"			,bill_serial_nbs,acct_id,billing_cycle_id);				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);		}		if(cDatabase->GetRowCount()!=atol(item_count))		{			strcpy(lsTemp,"更新帐目表失败,更新数目不合");			cDatabase->Rollback();			if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,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 amount=%s,change=%s,last_change=%s,balance=%s,last_balance=%s,derated=%s, "			      "    bill_serial_nbr=%s,pay_serial_nbr=%s "			      "WHERE acct_id=%s AND billing_cycle_id=%s AND state='S0C' ",			amount,change,last_change,balance,last_balance,derate,bill_serial_nbs,pay_serial_nbs,acct_id,billing_cycle_id);				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);		}				if(cDatabase->GetRowCount()!=1)		{			strcpy(lsTemp,"更新批量销帐中间表失败,更新数目不合");			cDatabase->Rollback();			if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1)			{				strcat(lsTemp,lsErr);				cDatabase->Rollback();			}			else				cDatabase->Commit();			sell_list.FreeList(1);			StrReturn(-1,lsTemp);		}		sprintf(last_change,change);				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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1)			{				strcat(lsTemp,lsErr);				cDatabase->Rollback();			}			else				cDatabase->Commit();			sell_list.FreeList(1);			StrReturn(-1,lsTemp);		}	}		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 )"			"SELECT bill_serial_nbr,pay_serial_nbr,sysdate,staff_id,sysdate,NULL,1,sysdate,NULL,"			"		 NULL,'40C',sysdate,bill_serial_nbr,amount,acct_id,last_change,0,created_billing_cycle_id "			"FROM B_ACCT_ITEM_SELL WHERE staff_id=%s AND created_billing_cycle_id=%s AND state='S0C'",		StaffID,CBillingCycleID);        //userlog(lsSql);	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,"INSERT INTO PAYMENT "			"SELECT pay_serial_nbr,max(acct_id),max(acct_seq_nbr),'11','10',NULL,sum(amount),sysdate,"			"		 max(staff_id),'C0C',sysdate,NULL,NULL "			"FROM B_ACCT_ITEM_SELL WHERE staff_id=%s AND created_billing_cycle_id=%s AND state='S0C' "			"GROUP BY pay_serial_nbr",		StaffID,CBillingCycleID);	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();		sell_list.FreeList(1);		StrReturn(-1,lsTemp);	}	sprintf(lsSql,"INSERT INTO SERV_PAID_UNPAY  "			"SELECT  seq_serv_paid_unpay.NEXTVAL, aa.*  "

⌨️ 快捷键说明

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