📄 charge_sell.cpp
字号:
#include "charge_sell.h"CSell::CSell(char *pcInp,COracle *pcDatabase){ cDatabase = pcDatabase; pInp = pcInp;}struct SellStruct{ char acct_id[9]; char billing_cycle_id[7]; char charge[13]; char late_fee[13]; char item_count[11]; char due_date[7]; char acct_item_id[19];};struct EraseStruct{ char bill_serial_nbr[19];};void CSell::SellPayment(char *StaffID,char *CBillingCycleID,char *PartnerID,char *StartNbr,char *EndNbr,char *SellID,char *LateFee,char *Derate,char *Balance,char *Change){ char lsSql[2048],lsTemp[1024],lsErr[500],lsRetstr[2048],lsRettemp[500]; char latefee_ratio[10],partner_id[6]; int isqlcode,lrow,lrow_cur; char acct_id[9],billing_cycle_id[7],charge[13],last_change[3],change[3],balance[13]; char last_balance[13],late_fee[13],derate[13],amount[13],item_count[11]; char acct_id_cur[9],derated_type[3],derated_value[13],due_date[7],total_charge[13]; char bill_serial_nbs[19],pay_serial_nbs[19],acct_item_id[19]; if (LateFee[0]=='1') { sprintf(lsSql,"SELECT para_value FROM LBAS_PARAMETER WHERE para_name='partner_id'"); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); strcpy(lsRetstr,"提取缺省运营商失败"); //userlog("提取确省运营商失败"); if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsRetstr,lsTemp),lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } lrow=cDatabase->GetRowCount(); if(lrow==0) { cDatabase->Commit(); StrReturn(100,"未找到确省运营商"); //userlog("未找到确省运营商"); } strcpy(partner_id,cDatabase->GetData()); rtrim(ltrim(partner_id));/* sprintf(lsSql,"SELECT para_value FROM LBAS_PARAMETER WHERE para_name='latefee_ratio'"); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); strcpy(lsRetstr,"提取滞纳金计算比率失败"); //userlog("提取滞纳金计算比率失败"); if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsRetstr,lsTemp),lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } lrow=cDatabase->GetRowCount(); if(lrow==0) { cDatabase->Commit(); StrReturn(100,"未找到滞纳金计算比率"); //userlog("未找到滞纳金计算比率"); } strcpy(latefee_ratio,cDatabase->GetData()); rtrim(ltrim(latefee_ratio)); sprintf(lsSql,"INSERT INTO B_ACCT_ITEM_O " "SELECT min(a.acct_item_id),max(a.serv_id),max(a.serv_seq_nbr),a.acct_id,max(a.acct_seq_nbr),1, " " round((case when sum(a.charge)<0 then 0 else sum(a.charge) end)*min(case when trunc(sysdate - b.due_date)<0 then 0 else trunc(sysdate - b.due_date) end)*%s,0), " " a.billing_cycle_id,sysdate,%s,'20C',sysdate,0,0,1,1,null,'1' " "FROM B_ACCT_ITEM_O a,B_BILLING_CYCLE b " "WHERE a.acct_id IN (SELECT acct_id FROM b_acct WHERE state='10A' AND acc_nbr BETWEEN '%s' AND '%s' AND sell_id=%s AND payment_method NOT LIKE '5_') AND " " a.partner_id=%s AND a.billing_cycle_id=b.billing_cycle_id AND a.state IN ('20C','20Q','20T','20Y','20S','20Z') " "GROUP BY a.acct_id,a.billing_cycle_id", latefee_ratio,partner_id,StartNbr,EndNbr,SellID,partner_id); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); strcpy(lsTemp,"插入滞纳金失败");strcat(lsTemp,"\n"); //userlog("插入滞纳金失败"); if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); StrReturn(-1,lsTemp); }*/ } isqlcode=GetMaxBillNo(cDatabase,StaffID,bill_serial_nbs,lsTemp); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); strcpy(lsTemp,"提取最大销帐流水号出错2");strcat(lsTemp,"\n"); //userlog("提取最大销帐流水号出错2"); if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); StrReturn(-1,lsTemp); } isqlcode=GetMaxPayNo(cDatabase,StaffID,pay_serial_nbs,lsTemp); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); strcpy(lsTemp,"提取最大付款流水号出错3");strcat(lsTemp,"\n"); //userlog("提取最大付款流水号出错3"); if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); StrReturn(-1,lsTemp); } sprintf(lsSql,"INSERT INTO B_ACCT_ITEM_SELL " "SELECT a.acct_id,a.billing_cycle_id,b.acc_nbr,sum(decode(a.acct_item_type_id,1,0,a.charge)), " " 0,0,sum(decode(a.acct_item_type_id,1,a.charge,0)),0,0,0,0,%s,b.sell_id,%s,0,0,count(*), " " min(acct_item_id),'S0C',null,decode(%s,1,count(distinct(a.partner_id)),1),null, " " min(trunc(sysdate - c.due_date)),max(b.acct_seq_nbr) " "FROM B_ACCT_ITEM_O a,B_ACCT b,B_BILLING_CYCLE c " "WHERE a.acct_id=b.acct_id AND b.acc_nbr BETWEEN '%s' AND '%s' AND b.state='10A' AND b.sell_id=%s AND b.payment_method NOT LIKE '5_' AND " " a.state IN ('20C','20Q','20T','20Y','20S','20Z') AND a.billing_cycle_id=c.billing_cycle_id " "GROUP BY a.acct_id,a.billing_cycle_id,b.acc_nbr,b.sell_id " "ORDER BY b.acc_nbr,a.billing_cycle_id", StaffID,CBillingCycleID,PartnerID,StartNbr,EndNbr,SellID); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); strcpy(lsTemp,"插入批量销帐中间表失败\n"); if(WriteLog(cDatabase,StaffID,"w_p_sell",strcat(lsTemp,lsRetstr),lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); StrReturn(-1,lsTemp); } sprintf(lsSql,"SELECT acct_id,billing_cycle_id,charge,late_fee,acct_item_id,due_date,serial_num " "FROM B_ACCT_ITEM_SELL " "WHERE staff_id=%s AND created_billing_cycle_id=%s AND state='S0C' " "ORDER BY acc_nbr,acct_id,billing_cycle_id ", 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(); StrReturn(-1,lsTemp); } if(cDatabase->GetRowCount()==0) { strcpy(lsTemp,"没有找到批量销帐数据"); //userlog("没有找到批量销帐数据"); cDatabase->Rollback(); if(WriteLog(cDatabase,StaffID,"w_p_sell",lsTemp,lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); StrReturn(100,lsTemp); } SupListT<SellStruct> sell_list; lrow=cDatabase->GetRowCount(); for(long i=0;i<lrow;i++) { SellStruct *psell=new SellStruct; strcpy(psell->acct_id,cDatabase->data->GetColData(i+1,1)); strcpy(psell->billing_cycle_id,cDatabase->data->GetColData(i+1,2)); strcpy(psell->charge,cDatabase->data->GetColData(i+1,3)); strcpy(psell->late_fee,cDatabase->data->GetColData(i+1,4)); strcpy(psell->item_count,cDatabase->data->GetColData(i+1,5)); strcpy(psell->due_date,cDatabase->data->GetColData(i+1,6)); strcpy(psell->acct_item_id,cDatabase->data->GetColData(i+1,7)); sell_list.AddTail(psell); } rtrim(ltrim(strcpy(acct_id,cDatabase->data->GetColData(1,1)))); sprintf(lsSql, "update b_acct set balance=(select total_amount from balance_table_admin where acct_id=%s and state='1') " "where acct_id=(select acct_id from balance_table_admin where acct_id=%s and state='1') " "and state='10A'",acct_id,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); } sprintf(lsSql, "update lbas.acct set balance=(select total_amount from balance_table_admin where acct_id=%s and state='1') " "where acct_id=(select acct_id from balance_table_admin where acct_id=%s and state='1') " "and state='10A'",acct_id,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); } sprintf(lsSql,"SELECT change,balance FROM B_ACCT WHERE acct_id=%s AND state='10A'",acct_id); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); strcpy(lsTemp,"提取第一个用户零钞及预付款失败"); //userlog("提取第一个用户零钞及预付款失败"); 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(100,lsTemp); } rtrim(ltrim(strcpy(last_change,cDatabase->data->GetColData(1,1)))); rtrim(ltrim(strcpy(last_balance,cDatabase->data->GetColData(1,2)))); sprintf(charge,"0"); sprintf(amount,"0"); sprintf(late_fee,"0"); sprintf(derate,"0"); sprintf(change,"0"); sprintf(balance,"0"); sell_list.SeekHead(); for(int i=0;i<sell_list.GetCount();i++) { SellStruct *mysell=sell_list.GetNext(); rtrim(ltrim(strcpy(acct_id_cur,mysell->acct_id))); rtrim(ltrim(strcpy(billing_cycle_id,mysell->billing_cycle_id))); rtrim(ltrim(strcpy(charge,mysell->charge))); rtrim(ltrim(strcpy(late_fee,mysell->late_fee))); rtrim(ltrim(strcpy(acct_item_id,mysell->item_count))); rtrim(ltrim(strcpy(due_date,mysell->due_date))); rtrim(ltrim(strcpy(item_count,mysell->acct_item_id))); if(strcmp(acct_id,acct_id_cur)!=0) { sprintf(acct_id,acct_id_cur); sprintf(lsSql, "update b_acct set balance=(select total_amount from balance_table_admin where acct_id=%s and state='1') " "where acct_id=(select acct_id from balance_table_admin where acct_id=%s and state='1') " "and state='10A'",acct_id,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); } sprintf(lsSql, "update lbas.acct set balance=(select total_amount from balance_table_admin where acct_id=%s and state='1') " "where acct_id=(select acct_id from balance_table_admin where acct_id=%s and state='1') " "and state='10A'",acct_id,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); } sprintf(lsSql,"SELECT change,balance FROM B_ACCT WHERE acct_id=%s AND state='10A'",acct_id); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); if(isqlcode<0) { strcpy(lsRetstr,lsTemp); cDatabase->Rollback(); sprintf(lsTemp,"提取用户%s零钞及预付款失败",acct_id);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) { sprintf(lsTemp,"提取用户%s零钞及预付款失败,提取数目不合",acct_id); 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(100,lsTemp); } rtrim(ltrim(strcpy(last_change,cDatabase->data->GetColData(1,1)))); rtrim(ltrim(strcpy(last_balance,cDatabase->data->GetColData(1,2)))); sprintf(amount,"0"); sprintf(derate,"0"); sprintf(change,"0"); sprintf(balance,"0"); 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_sell",strcat(lsTemp,lsRetstr),lsErr)!=1) { strcat(lsTemp,lsErr); cDatabase->Rollback(); } else cDatabase->Commit(); sell_list.FreeList(1); StrReturn(-1,lsTemp); } } if(Derate[0]=='1'&&LateFee[0]=='1') { sprintf(lsSql,"SELECT calc_type,value FROM BACK_DERATED " "WHERE code_type='01' AND code=%s AND state='B0A' AND " "(eff_billing_cycle_id=%s OR eff_billing_cycle_id=0) AND " "write_off_mode='01' AND eff_date<=sysdate AND exp_date>=sysdate ",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -