📄 charge_balance.cpp
字号:
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); } //更新实时费用表 /*sprintf(lsSql, "UPDATE LBAS.realtime_charge_acc " "SET month_acc = 0 " "WHERE 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,"更新计费库realtime_charge_acc表中的month_acc字段的值时出错!\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); } */ //更新计费库ACCT表中的balance字段的值// sprintf(lsSql,// "UPDATE LBAS.ACCT "// "SET balance = %ld + %ld "// "WHERE acct_id=%s AND "// "state = '10A' "// ,balance,lde_present,acct_id); sprintf(lsSql, "UPDATE LBAS.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,"更新计费库ACCT表中的balance字段的值时出错!\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); } //插入预付款的存取款记录 rt=GetMaxPayNo(cDatabase,staff_id,paymaxno,lsErr); if(rt!=1) { strcpy(lsTemp,"生成预付款付取款记录流水号时出错!\n"); strcat(lsTemp,lsErr); strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } //userlog(paymaxno); sprintf(lsSql," select seq_balance_hist_admin.nextval from dual "); 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); } sprintf(hist_id,rtrim(ltrim(cDatabase->GetData()))); /* sprintf(lsSql, "INSERT INTO PAYMENT " "(pay_serial_nbr,acct_id,acct_seq_nbr,payment_method,operation_type, " "oper_serial_nbr,amount,pay_date,staff_id,state,state_date,chequ_nbr,card_nbr) " "VALUES(%s,%s,%s,'40','%s', " "null,%ld, sysdate,%s,'C0C',sysdate,'%s','') " ,hist_id,acct_id,acct_seq_nbr,ls_optype,amount,staff_id,checknbr);*/ sprintf(lsSql, "INSERT INTO PAYMENT " "(pay_serial_nbr,acct_id,acct_seq_nbr,payment_method,operation_type, " "oper_serial_nbr,amount,pay_date,staff_id,state,state_date,chequ_nbr,card_nbr) " "select %s,%s,%s,payment_method,'%s', " "null,%ld, sysdate,%s,'C0C',sysdate,'%s','' from lbas.acct " "where acct_id=%s and acct_seq_nbr=%s " ,hist_id,acct_id,acct_seq_nbr,ls_optype,amount,staff_id,checknbr,acct_id,acct_seq_nbr); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); if(isqlcode<0) { strcpy(lsTemp,"向销帐库的PAYMENT表中插入存取款记录时出错!\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_HIST_ADMIN表中插数据// sprintf(lsSql,// "INSERT INTO BALANCE_HIST_ADMIN "// "(balance_hist_admin_id,acct_id,amount,use_catg,staff_id,balance,use_date,state,present ) "// "VALUES (%s,%s,%ld,'%s', "// "%s,%ld + %ld,sysdate,'01',%ld) "// ,hist_id,acct_id,amount,ls_conduct,staff_id,balance,lde_present,lde_present); sprintf(lsSql, "INSERT INTO BALANCE_HIST_ADMIN " "(balance_hist_admin_id,acct_id,amount,use_catg,staff_id,balance,use_date,state,present ) " "select %s,%s,%ld,'%s', " "%s,total_amount,sysdate,'01',%ld from balance_table_admin where acct_id=%s and state='1' " ,hist_id,acct_id,amount,ls_conduct,staff_id,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,"向销帐库的BALANCE_HIST_ADMIN表中插数据时出错4!\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); } if(lde_present>0) {// sprintf(lsSql,// " insert into balance_hist_eff_exp "// "(balance_hist_admin_id,acct_id,amount,present,eff_date,eff_month,state,state_date,balance,staff_id) "// " values(%s,%s,%ld,%ld,to_date('%s','yyyy-mm-dd'),%s,'01',sysdate,%ld + %ld,%s )"// ,hist_id,acct_id,amount,lde_present,ls_eff_date,ls_month,balance,lde_present,staff_id); sprintf(lsSql, " insert into balance_hist_eff_exp " " (balance_hist_admin_id,acct_id,amount,present,eff_date,eff_month,state,state_date,balance,staff_id) " " select %s,%s,%ld,%ld,to_date('%s','yyyy-mm-dd'),%s,'01',sysdate,total_amount,%s from balance_table_admin where acct_id=%s and state='1' " ,hist_id,acct_id,amount,lde_present,ls_eff_date,ls_month,staff_id,acct_id); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); if(isqlcode<0) { strcpy(lsTemp,"向销帐库的BALANCE_HIST_EFF_EXP表中插数据时出错4!\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); } } strcpy(lsTemp,systime); } //销帐 // if((total_amount>=0)&&(amount>=0)) //销帐实收费用大于0,并且存款 才执行销帐 if(write_flag==1) { if( atof(derate)>0) { sprintf(lsSql,"INSERT INTO B_ACCT_ITEM_O " "SELECT min(acct_item_id),null,null,%s,%s,1, " " %s*100, " " %s,sysdate,1,'20C',sysdate,0,0,1,1,null,'1' " "FROM B_ACCT_ITEM_O " "WHERE acct_id =%s " " and acct_seq_nbr=%s " " and billing_cycle_id=%s " " and state IN ('20C','20Q','20T','20Y','20S','20Z') " ,acct_id,acct_seq_nbr,derate,billing_cycle_id,acct_id,acct_seq_nbr,billing_cycle_id); //userlog(lsSql); 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); } } ///////////////////////////////////////// //从库中取总余额 sprintf(lsSql, "select total_amount,advance,present " "FROM BALANCE_TABLE_ADMIN " "WHERE acct_id = %s AND state = '1' " ,acct_id); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsTemp,"取帐户余额出错!\n"); cDatabase->Rollback(); if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } strcpy(ls_w_balance,cDatabase->data->GetColData(1,1)); strcpy(ls_w_advance,cDatabase->data->GetColData(1,2)); strcpy(ls_w_present,cDatabase->data->GetColData(1,3)); w_balance=atol(ls_w_balance); w_advance=atol(ls_w_advance); w_present=atol(ls_w_present); w_balance-=total_amount;//剩余总余额 long writeoff_advance, writeoff_present ; if(w_advance>=total_amount) { w_advance-=total_amount; writeoff_advance = total_amount; writeoff_present = 0 ; } else { w_present-=(total_amount - w_advance);//预存款余额 writeoff_advance = w_advance ; writeoff_present = total_amount - w_advance; w_advance=0; }///////////////////////////////////////// isqlcode=GetMaxBillNo(cDatabase,staff_id,bill_serial_nbr,lsTemp); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); strcpy(lsTemp,"提取最大销帐流水号出错2");strcat(lsTemp,"\n"); //userlog("提取最大销帐流水号出错2"); if(WriteLog(cDatabase,staff_id,"w_p_balance",strcat(lsTemp,lsRetstr),lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); StrReturn(-1,lsTemp); } isqlcode=GetMaxPayNo(cDatabase,staff_id,pay_serial_nbr,lsTemp); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); strcpy(lsTemp,"提取最大付款流水号出错2");strcat(lsTemp,"\n"); //userlog("提取最大付款流水号出错2"); if(WriteLog(cDatabase,staff_id,"w_p_balance",strcat(lsTemp,lsRetstr),lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); StrReturn(-1,lsTemp); } sprintf(lsSql,"update b_acct_item_o " " set bill_serial_nbr=%s ," " state=decode(state,'20C','20P','20Q','20R','20P'), " " state_date=sysdate " " where acct_id=%s" " and billing_cycle_id=%s" " and state IN ('20C','20Q','20T','20Y','20S','20Z')" ,bill_serial_nbr,acct_id,billing_cycle_id); // //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); // //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); 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); } sprintf(lsSql, " INSERT INTO intf_acct_item(Acct_item_id,Billing_cycle_id,Acct_id, " " Serv_id,Acct_item_type_id,Charge,Action,Action_date) " " SELECT to_char(acct_item_id),to_char(billing_cycle_id),to_char(acct_id),to_char(serv_id), " " to_char(acct_item_type_id),charge,'01',sysdate " " FROM B_ACCT_ITEM_O " " WHERE acct_id=%s" " AND bill_serial_nbr=%s " " AND billing_cycle_id=%s" " AND state IN ('20P','20R')" " AND acct_item_type_id not in (1,999999,999998) " ,acct_id,bill_serial_nbr,billing_cycle_id); // //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); // //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); 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); } sprintf(lsSql," update b_acct " " set change=0, " " balance=%ld " " where acct_id=%s" " and state='10A' " ,w_balance,acct_id); // //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); // //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); 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); } sprintf(lsSql," update lbas.acct " " set change=0, " " balance=%ld " " where acct_id=%s" " and state='10A' " ,w_balance,acct_id); // //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); // //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); 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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -