📄 charge_settle.cpp
字号:
#include "charge_settle.h"#include "payment.flds.h"CSettle::CSettle(char *pcInp,COracle *pcDatabase){ cDatabase = pcDatabase; pInp = pcInp;}//-----------------------------------------------------------------//服务PTGetItem实现函数,传入参数staff_id,acct_id//取销户结清费用信息//-----------------------------------------------------------------void CSettle::PTGetItem(){ char lsSql[2048],lsTemp[500],lsErr[500],lsReturn[1024]; int i,isqlcode,lpnum,rpnum; int li_count=0; char staff_id[20],acct_id[20],serv_id[11],acct_nbr_97[20],acct_seq_nbr[20]; char customer_name[100],acc_nbr[20],systime[20],areacode[6]; char *lparm[9]; float lf_once_fee=0,lf_once_fee1=0,lf_charge=0,lf_change=0,lf_realcharge=0; int li_change,li_realcharge,li_oncecharge; int li_method; char ls_realtime_info[40]; long ll_billing_cycle_id; //userlog(pInp); lpnum=9; rpnum=GetInputParm(pInp,lparm,50); if(rpnum!=lpnum) { lpfree(lparm,rpnum); strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n"); if(WriteLog(cDatabase,"-1","w_p_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } strcpy(staff_id,lparm[0]); li_method=atol(lparm[5]); if(li_method==0) { sprintf(acct_id,"%s",lparm[1]); } else { strcpy(serv_id,lparm[1]); } li_change=atol(lparm[2]); li_realcharge=atol(lparm[3]); li_oncecharge=atol(lparm[4]); ll_billing_cycle_id=atol(lparm[6]); strcpy(acc_nbr,lparm[7]); strcpy(areacode,lparm[8]); lpfree(lparm,rpnum); if(GetSystime(cDatabase,systime,lsErr)!=1 || systime==NULL) { strcpy(lsTemp,"取系统时间出错!\n"); strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } strcpy(lsReturn,NULL); //按合同号结算 if(li_method==0) { sprintf(lsSql, "SELECT acct_id " "FROM B_ACCT_ITEM_ENTRUST " "WHERE acct_id =%s " "AND state = 'E0A' " ,acct_id); 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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()>0) { strcpy(lsTemp,"该用户尚有费用处于送托状态,不能做销户结清处理,请先做托收销帐处理!\n"); cDatabase->Rollback(); cDatabase->Commit(); StrReturn(-2,lsTemp); } sprintf(lsSql, "SELECT acct_id " "FROM B_ACCT_ITEM_O " "WHERE acct_id = %s " " AND billing_cycle_id<%ld " "AND state in ('20C','20Q') " ,acct_id,ll_billing_cycle_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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()>0) { strcpy(lsTemp,"该用户尚有欠费,不能做销户结清处理,请先做销帐处理!\n"); cDatabase->Rollback(); cDatabase->Commit(); StrReturn(-2,lsTemp); } if(li_realcharge==0) { sprintf(lsSql," begin lbas.p_a_acct_realtime_acct(%s,%ld,:returncode ); end;",acct_id,ll_billing_cycle_id); char ls_return[40]; strcpy(ls_return,cDatabase->ExecProc(lsSql)); if(ls_return[0]>'9') { StrReturn(-1,ls_return); } else { sprintf(lsSql, " select sum(charge)*0.01 " " from b_acct_item_o " " where acct_id = %s " " and billing_cycle_id=%ld " " and state in ('20C' ,'20T','20Q','20Y','20S','20Z') " ,acct_id,ll_billing_cycle_id ); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsTemp,"计算实时费用出错!\n"); strcat(lsTemp,cDatabase->GetSqlErrText()); strcat(lsTemp,"\n"); StrReturn(-1,lsTemp); } lf_charge=atof(cDatabase->GetData()); if(lf_charge!=0) { sprintf(lsReturn,"%s\t1\t%.2f\tC0C\t%s\r\n",acct_id,lf_charge,systime); strcat(lsTemp,lsReturn); ////userlog(lsReturn); li_count++; } } //} } if(li_change==0) { sprintf(lsSql, "SELECT NVL(change,0) / 100.00,'' " "FROM B_ACCT " "WHERE acct_id = %s " "AND state = '10A' " ,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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()==0) { lf_change=0; } else { lf_change=atof(cDatabase->data->GetColData(1,1)); } if(lf_change!=0) { sprintf(lsTemp,"%s\t2\t%f\tC0C\t%s\r\n",acct_id,lf_change,systime); strcat(lsReturn,lsTemp); li_count++; } } if(li_oncecharge==0) { sprintf(lsSql, "SELECT NVL(sum(charge),0) / 100.00,'' " "FROM LBAS.SERV_ONCE_FEE a,LBAS.SERV b " "WHERE a.serv_id = b.serv_id " "AND a.serv_seq_nbr = b.serv_seq_nbr " "AND a.state = '1' " "AND b.state <> 'F0X' " "and a.edit_time>sysdate " "AND b.acct_id = %s " ,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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()==0) { lf_once_fee1=0; } else { lf_once_fee1=atof(cDatabase->data->GetColData(1,1)); } sprintf(lsSql, "SELECT NVL(sum(charge),0) / 100.00,'' " "FROM LBAS.ACCT_ONCE_FEE " "WHERE acct_id = %s " "AND state = '1' " ,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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()==0) { lf_once_fee=0; } else { lf_once_fee=atof(cDatabase->data->GetColData(1,1)); } lf_once_fee = lf_once_fee + lf_once_fee1; if(lf_once_fee!=0) { sprintf(lsTemp,"%s\t3\t%f\tC0C\t%s\r\n",acct_id,lf_once_fee,systime); strcat(lsReturn,lsTemp); li_count++; } sprintf(lsSql, "SELECT NVL(sum(carryover),0) / 100.00 + NVL(sum(last_carryover),0) / 100.00 ,'' " "FROM COMIT_BALANCE " "WHERE acct_id = %s " "AND state = '01' " ,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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()==0) { lf_charge=0; } else { lf_charge=atof(cDatabase->data->GetColData(1,1)); } if(lf_charge!=0) { sprintf(lsTemp,"%s\t4\t%f\tC0C\t%s\r\n",acct_id,lf_charge,systime); strcat(lsReturn,lsTemp); li_count++; } sprintf(lsSql, "SELECT NVL(-sum(amount),0) / 100.00,'' " "FROM BALANCE_HIST_ADMIN " "WHERE acct_id = %s " "AND state='01' " ,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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()==0) { lf_charge=0; } else { lf_charge=atof(cDatabase->data->GetColData(1,1)); } if(lf_charge!=0) { sprintf(lsTemp,"%s\t5\t%f\tC0C\t%s\r\n",acct_id,lf_charge,systime); strcat(lsReturn,lsTemp); // //userlog(lsReturn); li_count++; } sprintf(lsSql, "SELECT NVL(sum(charge_sum),0) / 100.00 + NVL(sum(charge_current),0) / 100.00,'' " "FROM INSTALMENT_BALANCE " "WHERE acct_id = %s " "AND state='01' " ,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_settle",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } else if(isqlcode==0 && cDatabase->GetRowCount()==0) { lf_charge=0; } else { lf_charge=atof(cDatabase->data->GetColData(1,1)); } if(lf_charge!=0) { sprintf(lsTemp,"%s\t6\t%f\tC0C\t%s\r\n",acct_id,lf_charge,systime); strcat(lsReturn,lsTemp); li_count++; } } } //按单机结算 if(li_method==1) { if(li_realcharge==0) { sprintf(lsSql," begin lbas.p_a_serv_realtime_acct('%s','%s',%ld,:returncode ); end;",areacode,acc_nbr,ll_billing_cycle_id); char ls_return[40]; strcpy(ls_return,cDatabase->ExecProc(lsSql)); if(ls_return[0]>'9') { StrReturn(-1,ls_return); } else { sprintf(lsSql, " select sum(charge)*0.01 " " from b_acct_item_o " " where serv_id = %s " " and billing_cycle_id=%ld " " and state in ('20C' ,'20T','20Q','20Y','20S','20Z') " ,serv_id,ll_billing_cycle_id );// //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsTemp,"计算实时费用出错!\n"); strcat(lsTemp,cDatabase->GetSqlErrText()); strcat(lsTemp,"\n"); StrReturn(-1,lsTemp); } lf_charge=atof(cDatabase->GetData()); if(lf_charge!=0) { sprintf(lsReturn,"%s\t1\t%.2f\tC0C\t%s\r\n",serv_id,lf_charge,systime); strcat(lsTemp,lsReturn);// //userlog(lsReturn); li_count++; } } //} } if(li_oncecharge==0) { sprintf(lsSql, "SELECT NVL(sum(charge),0) / 100.00,'' " "FROM LBAS.SERV_ONCE_FEE a,LBAS.SERV b "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -