📄 charge_balance.cpp
字号:
#include "charge_balance.h"#include "payment.flds.h"//-----------------------------------------------------------------//构造函数//-----------------------------------------------------------------CBalance::CBalance(char *pcInp,COracle *pcDatabase){ cDatabase = pcDatabase; pInp = pcInp;}//------------------------------------------------------------------------//服务 PBWriteOff 实现函数,实现存款和销帐——共15个参数//传入参数gl_staff_id,acct_id,acct_seq_nbr,// 营业员 合同号 合同号序列号 (销帐|存款共有参数)//billing_cycle_id,charge,change,derate //帐期(200210) 费用 上次零钱 违约金 (销帐参数)//checknbr,amount,balance,cycle_begin_date,//支票号码 输入金额 帐户余额 帐期(20021021) //present_staff,ldt_advance,ldt_present//赠款预存标识 预存款余额 赠款余额 (存款参数)//------------------------------------------------------------------------void CBalance::BalWriteOff(){ char lsSql[2048],lsTemp[1024],lsErr[500]; char staff_id[20],acct_id[20],acct_seq_nbr[6]; char *lparm[20]; int i,isqlcode,lpnum,rpnum; int bal_flag; //----共有变量---- char change[10],new_change[10],charge[15],derate[15],billing_cycle_id[10]; char bill_serial_nbr[20],pay_serial_nbr[20]; char lsRetstr[200]; char ls_w_balance[20],ls_w_advance[20],ls_w_present[20];//余额 long w_balance,w_advance,w_present;//余额 long total_amount;//销帐实收费用 //----销帐变量---- char checknbr[50],cycle_begin_date[15]; char paymaxno[30],paymethod[4],systime[20]; char ls_conduct[2],ls_optype[4]; long year,month,day; int rt,write_flag; int day_diff; long remain; char hist_id[15]; char ls_amount[20],ls_balance[20]; long amount;//当前操作金额 long balance;//总的余额 char ls_present[20],ls_eff_date[15],ls_month[6];//接收预存款、赠款预存本金临时变量 long lde_advance;//预存款余额 long lde_present;//赠款余额 char present_staff[2]; //赠款存入标识 long t_present;//临时赠款本金用于检索赠款 char p_type[2],t_type[2],p_rate[3],t_month[3];//赠费标识|失效时间计算方式标识|赠费比例|有效期 //----存款变量---- char temp_date[20],nullity_date[20];//有效时间 long n_year,n_month;//用于计算有效期 char a_year[10],a_month[10],a_day[10];//用于计算有效期 char temp_year[10],temp_md[10];//用于重新组织失效时间顺序。 //----有效时间变量---- lpnum=17; //userlog(pInp); rpnum=GetInputParm(pInp,lparm,50); if(rpnum!=lpnum) { lpfree(lparm,rpnum); cDatabase->Rollback(); strcpy(lsTemp,"解析客户端传入参数失败,可能参数数据或传输格式不正确!\n"); if(WriteLog(cDatabase,"-1","w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } strcpy(staff_id,lparm[0]); strcpy(acct_id,lparm[1]); strcpy(acct_seq_nbr,lparm[2]); strcpy(billing_cycle_id,lparm[3]);//帐期(200210) strcpy(charge,lparm[4]);//费用 strcpy(change,lparm[5]);//上次零钱 strcpy(derate,lparm[6]);//违约金 total_amount=atof(charge)*100+atof(change)*100+atof(derate)*100;//销帐实收费用 strcpy(checknbr,lparm[7]);//支票号 strcpy(cycle_begin_date,lparm[8]);//帐期(20021021) bal_flag=atoi(lparm[9]); //第一次调用服务标识 write_flag=atoi(lparm[10]); strcpy(ls_amount,lparm[11]);//输入金额 strcpy(ls_balance,lparm[12]);//帐户余额 strcpy(present_staff,lparm[13]);//赠费存款标识 strcpy(ls_present,lparm[14]);//赠款余额 strcpy(ls_eff_date,lparm[15]); strcpy(ls_month,lparm[16]); amount=atol(ls_amount); balance=atol(ls_balance); lde_present=atol(ls_present); lpfree(lparm,rpnum); strcpy(lsTemp," ");//初始化返回变量——实现多次销帐的参数返回/////////////////////////////////////////////// //取系统时间(单独提出来) strcpy(lsSql, "SELECT to_char(sysdate,'YYYY-MM-DD'),to_char(sysdate,'yy'), " "to_char(sysdate,'mm'),to_char(sysdate,'dd') " "FROM dual " ); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsTemp,"存取预付款取系统时间出错!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } strcpy(systime,cDatabase->data->GetColData(1,1)); year=atol(cDatabase->data->GetColData(1,2)); month=atol(cDatabase->data->GetColData(1,3)); day=atol(cDatabase->data->GetColData(1,4));/////////////////////////////////////////////// //存款 if(bal_flag==0) { /////////////////////////////////////////////// if(strcmp(cycle_begin_date,"0")==0) { strcpy(lsSql,"select to_char(max(cycle_begin_date),'yyyymmdd')" " from b_billing_cycle " " where cycle_begin_date<sysdate"); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); if(isqlcode<0) { strcpy(lsTemp,"存取费用开始时间出错!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } strcpy(cycle_begin_date,cDatabase->GetData()); } sprintf(lsSql," select trunc(sysdate - to_date('%s','yyyymmdd'),0) from dual " ,cycle_begin_date); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog(lsSql); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); if(isqlcode<0) { strcpy(lsTemp,"取时间差出错!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } day_diff=atoi(cDatabase->GetData()); /* sprintf(lsSql," insert into LBAS.service_billing " " select LBAS.seq_service_billing_init.nextval ," " area_code,acc_nbr,'05',to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'0',serv_type_id " " from lbas.serv " " where acct_id=%s" " and state ='F0K' " ,acct_id); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog(lsSql); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); if(isqlcode<0) { strcpy(lsTemp,"插入复机清单出错!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); }*/ sprintf(lsSql," insert into LBAS.service_billing_hlr " " select LBAS.seq_service_billing_init.nextval ," " area_code,acc_nbr,'05',to_char(sysdate,'yyyy:mm:dd hh24:mi:ss'),'0',serv_type_id " " from lbas.serv " " where acct_id=%s" " and state ='F0K' " ,acct_id); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog(lsSql); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); if(isqlcode<0) { strcpy(lsTemp,"插入复机清单出错service_billing_hlr!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } sprintf(lsSql,"update b_serv " " set state=decode(state,'F0K','F0A','F0L','F0J') " " where acct_id=%s " " and state in ('F0K','F0L') " ,acct_id); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog(lsSql); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); if(isqlcode<0) { strcpy(lsTemp,"修改收费档案出错!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } sprintf(lsSql,"update lbas.serv " " set state=decode(state,'F0K','F0A','F0L','F0J') " " where acct_id=%s " " and state in ('F0K','F0L') " ,acct_id ); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog(lsSql); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); if(isqlcode<0) { strcpy(lsTemp,"修改计费档案出错!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } sprintf(lsSql,"update lbas.realtime_charge_acc " " set state=decode(state,'F0K','F0A','F0L','F0J') " " where acct_id=%s " " and state in ('F0K','F0L') " ,acct_id ); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog(lsSql); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); if(isqlcode<0) { strcpy(lsTemp,"修改realtime_charge_acc出错!\n"); cDatabase->Rollback(); strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } if(amount>=0) { strcpy(ls_conduct,"1"); strcpy(ls_optype,"10"); } else { strcpy(ls_conduct,"2"); strcpy(ls_optype,"30"); } if(strcmp(checknbr,NULL)==0||strcmp(checknbr,"")==0) strcpy(paymethod,"11"); else strcpy(paymethod,"12"); cDatabase->BeginTran(); //计算基数 sprintf(lsSql, "UPDATE BALANCE_TABLE_ADMIN " "SET radix = radix + total_amount * ( (%d - to_number(to_char(state_date,'yy'))) * 360 + " "(%d - to_number(to_char(state_date,'mm'))) * 30 + " "((%d - %d/31) - (to_number(to_char(state_date,'dd')) - to_number(to_char(state_date,'dd'))/31)) ) " "WHERE acct_id = %s AND " "state = '1' " ,year,month,day,day,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"); cDatabase->Rollback(); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } /////////////////////////////////////////////// //更新销帐库的BALANCE_TABLE_ADMIN表中的数据/* sprintf(lsSql, "UPDATE BALANCE_TABLE_ADMIN " "SET total_amount = %ld + %ld , " " present=present + %ld, " " advance=advance + %ld, " "state_date = sysdate " "WHERE acct_id = %s AND " "state = '1' " ,balance,lde_present,lde_present,amount,acct_id);*/ sprintf(lsSql, "UPDATE BALANCE_TABLE_ADMIN " "SET total_amount = total_amount+%ld + %ld , " " present=present + %ld, " " advance=advance + %ld, " "state_date = sysdate " "WHERE acct_id = %s AND " "state = '1' " ,amount,lde_present,lde_present,amount,acct_id); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); if(isqlcode<0) { strcpy(lsTemp,"更新销帐库的BALANCE_TABLE_ADMIN表中的数据时出错!\n"); strcat(lsTemp,cDatabase->GetSqlErrText()); strcat(lsTemp,"\n"); cDatabase->Rollback(); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } //更新收费库B_ACCT表中的balance字段的值// sprintf(lsSql,// "UPDATE B_ACCT "// "SET balance = %ld + %ld "// "WHERE acct_id=%s AND "// "state='10A' "// ,balance,lde_present,acct_id); sprintf(lsSql, "UPDATE B_ACCT " "SET balance = balance+%ld + %ld " "WHERE acct_id=%s AND " "state='10A' " ,amount,lde_present,acct_id); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); if(isqlcode<0) { strcpy(lsTemp,"更新收费库B_ACCT表中的balance字段的值时出错!\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -