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

📄 charge_jlt_print.cpp

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





			lrow=cDatabase->GetRowCount();


			if(lrow==0) 


			{


				cDatabase->Commit();


				StrReturn(100,"未找到用户acct_id信息");


			}





			strcpy(lsRettemp,rtrim(ltrim(cDatabase->GetData())));strcat(lsRettemp,"\t");


			strcat(lsRettemp,serv_id);





			sprintf(lsSql,"SELECT bill_format_id FROM ACCT_BILL_FORMAT WHERE acct_id = %s ",acct_id);


			


			cDatabase->DoSql(lsSql);


			isqlcode=cDatabase->GetSqlCode();





			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) 


			{


				bill_format_id=cDatabase->GetData();


				strcat(lsRettemp,"\t");


				strcat(lsRettemp,bill_format_id);


			}





			cDatabase->Commit();


			StrReturn(0,lsRettemp);





		default:


			cDatabase->Commit();


			StrReturn(-1,"未知的号码类型");


	}


}





void CPayment::GetItem(char *StaffID,char *ItemType,char *Code)


{


	char lsSql[2048],lsTemp[1024],lsErr[500],lsRetstr[2048],lsRettemp[500];


	int isqlcode,lrow;


	int itemtype;





	itemtype = atoi(ItemType);





	switch (itemtype)


	{


		case 1:  //按合同号销帐


			sprintf(lsSql,"SELECT /*+ all_rows */  a.acct_id,a.billing_cycle_id,a.partner_id,a.bill_item_id,to_char(b.due_date,'yyyy-mm-dd'),sum(a.charge),"


										 "count(a.acct_item_id),max(a.serv_id),max(a.acct_item_id),1 flag,a.state  "


								"FROM B_ACCT_ITEM_O a,  "


									  "B_BILLING_CYCLE b  "


								"WHERE a.billing_cycle_id = b.billing_cycle_id and  "


										"a.acct_id = %s AND  "


										"a.state in ('20C','20Q','20S','20T','20Y','20Z')  "


								"group by a.acct_id,  "


										"a.billing_cycle_id,  "


										"a.partner_id,  "


										"a.bill_item_id,  "


										"to_char(b.due_date,'yyyy-mm-dd'),a.state  "


								"order by a.acct_id,  "


											"a.billing_cycle_id,  "


											"a.partner_id,  "


											"a.bill_item_id",Code);


			


			//userlog(lsSql);


			cDatabase->DoSql(lsSql);


			isqlcode=cDatabase->GetSqlCode();


			//userlog("sqlcode= %d",isqlcode);


			//userlog("RowCount= %d",cDatabase->GetRowCount());			


			


			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());





		case 2:  //按电话号销帐


			sprintf(lsSql,"SELECT /*+ all_rows */  a.acct_id,a.billing_cycle_id,a.partner_id,a.bill_item_id,"


								"to_char(b.due_date,'yyyy-mm-dd'),sum(a.charge),count(a.acct_item_id),a.serv_id,max(a.acct_item_id),1 flag,a.state  "


								"FROM B_ACCT_ITEM_O a,  "


								"B_BILLING_CYCLE b  "


								"WHERE a.billing_cycle_id = b.billing_cycle_id AND  "


										"a.serv_id = %s AND  "


										"a.state in ( '20C','20Q','20S','20T','20Y','20Z' )  "


								"group by a.acct_id,  "


									 "a.serv_id,  "


								         "a.billing_cycle_id,  "


								         "a.partner_id,  "


								         "a.bill_item_id,  "


								         "to_char(b.due_date,'yyyy-mm-dd'),a.state  "


								"order by a.acct_id,  "


									 "a.serv_id,  "


								         "a.billing_cycle_id,  "


								         "a.partner_id,  "


								         "a.bill_item_id",Code);





			cDatabase->DoSql(lsSql);


			isqlcode=cDatabase->GetSqlCode();





			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];





	int user_num,item_num,late_num;





	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);





	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);


		}


	}





	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);





		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(strcmp(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",late_fee,bill_serial_nbr,max_item_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();


								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(strcmp(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);


							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(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));


			sprintf(charge_total,"%d",atol(charge_total)+atol(amount));





			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)  "


								"VALUES (%s,%s,sysdate,%s,sysdate,null,1,sysdate,null,null,  "


										  "'40C',sysdate,%s,%s,%s,%s)",


								bill_serial_nbr,pay_serial_nbs,StaffID,bill_serial_nbr,amount,


								acct_id,old_change);





			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


⌨️ 快捷键说明

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