📄 charge_installment.cpp
字号:
#include "charge_installment.h"#include "payment.flds.h"//-----------------------------------------------------------------//构造函数//-----------------------------------------------------------------CInstallment::CInstallment(char *pcInp,COracle *pcDatabase){ cDatabase = pcDatabase; pInp = pcInp;}//-----------------------------------------------------------------//服务PIGetIns实现函数,传入参数staff_id,acct_id,acct_item_type_id//取帐户分期付款信息//-----------------------------------------------------------------void CInstallment::GetInsInfoAcct(){ char lsSql[2048],lsTemp[1024],lsErr[500]; char staff_id[20],acct_id[20],itypeid[20]; int isqlcode,lrow; char pstate[10]; char *lparm[3]; int i,lpnum,rpnum; lpnum=3; rpnum=GetInputParm(pInp,lparm,50); if(rpnum!=lpnum) { lpfree(lparm,rpnum); strcpy(lsTemp,"解析客户端传入参数失败,可能参数数据或传输格式不正确!\n"); if(WriteLog(cDatabase,"-1","w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } strcpy(staff_id,lparm[0]); strcpy(acct_id,lparm[1]); strcpy(itypeid,lparm[2]); lpfree(lparm,rpnum); //取用户帐户及分期付款信息 sprintf(lsSql, "SELECT INSTALMENT_BALANCE.acct_item_type_id," "INSTALMENT_BALANCE.charge_sum," "INSTALMENT_BALANCE.charge_current," "INSTALMENT_BALANCE.state," "B_ACCT.acct_id," "B_ACCT.payment_method," "B_ACCT.customer_name," "B_ADDRESS.detail," "B_ACCT_ITEM_TYPE_O.name " "FROM INSTALMENT_BALANCE, " "B_ACCT, " " B_ADDRESS, " "B_ACCT_ITEM_TYPE_O " "WHERE ( INSTALMENT_BALANCE.acct_id(+) = B_ACCT.acct_id) and " "( B_ACCT.address_id = B_ADDRESS.address_id(+) ) and " "( B_ACCT.acct_id = %s ) AND " "( B_ACCT.state = '10A' ) AND " "( INSTALMENT_BALANCE.state = '01' ) AND " "( INSTALMENT_BALANCE.acct_item_type_id = %s ) and " "( B_ACCT_ITEM_TYPE_O.acct_item_type_id = %s ) " ,acct_id,itypeid,itypeid ); //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,cDatabase->GetSqlErrText());strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } lrow=cDatabase->GetRowCount(); if(lrow==0) StrReturn(100,"合同号不存在!"); if(lrow>1) { strcpy(lsTemp,"取分期付款信息出错,检索出多排信息记录!"); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } cDatabase->Commit(); StrReturn(0,cDatabase->GetData()); } //------------------------------------------------------------------------//服务PISaveIns实现函数,分期付款存取//传入参数staff_id,acct_id,acct_item_type_id,amount//注解:ls_conduct为对INSTALMENT_BALANCE操作类型//ls_optype为对PAYMENT操作类型//------------------------------------------------------------------------void CInstallment::SaveInsInfo(){ char lsSql[2048],lsTemp[1024],lsErr[500]; char *lparm[10]; char staff_id[20],acct_id[20],acct_seq_nbr[4],itypeid[10]; char ls_amount[20],paymaxno[30],systime[20]; double amount,charge_sum,charge_current; char ls_conduct[2],ls_optype[4]; int i,isqlcode,lpnum,rpnum; int rt,lrow; lpnum=4; rpnum=GetInputParm(pInp,lparm,50); if(rpnum!=lpnum) { lpfree(lparm,rpnum); strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n"); if(WriteLog(cDatabase,"-1","w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } strcpy(staff_id,lparm[0]); strcpy(acct_id,lparm[1]); strcpy(itypeid,lparm[2]); strcpy(ls_amount,lparm[3]); amount=atof(ls_amount); lpfree(lparm,rpnum); if(amount>0) { strcpy(ls_conduct,"01"); strcpy(ls_optype,"10"); } else { strcpy(ls_conduct,"05"); strcpy(ls_optype,"30"); } cDatabase->BeginTran(); //检查合同号 sprintf(lsSql, "SELECT acct_id,acct_seq_nbr,tochar(sysdate,'yyyy-mm-dd') " "FROM B_ACCT " "WHERE acct_id = %s AND " "state = '10A' AND " "payment_method IN ('11','12','13') " ,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"); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } lrow=cDatabase->GetRowCount(); if(lrow!=1) { if(lrow==0) StrReturn(100,"合同号不存在或该帐户的付款方式不属于前台交纳!"); else { strcpy(lsTemp,"合同号对应档案不唯一!\n"); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } } strcpy(acct_seq_nbr,cDatabase->data->GetColData(1,2)); strcpy(systime,cDatabase->data->GetColData(1,3)); //从INSTALMENT_BALANCE表中检索数据 sprintf(lsSql, "SELECT NVL(charge_sum,0), NVL(charge_current,0) " "FROM INSTALMENT_BALANCE " "WHERE acct_id = %s AND " "state = '01' AND " "acct_item_type_id = %s " ,acct_id,itypeid); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); //userlog("检索返回行数:%d",cDatabase->GetRowCount()); lrow=cDatabase->GetRowCount(); if(isqlcode<0 || lrow>1 ) { strcpy(lsTemp,"从INSTALMENT_BALANCE表中检索数据时出错!\n"); strcat(lsTemp,cDatabase->GetSqlErrText()); strcat(lsTemp,"\n"); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } if(lrow==0) { //INSTALMENT_BALANCE表中无该合同号记录,增加之 if(amount<0) StrReturn(100,"帐目类型的第一次分期付款金额不能为负!"); sprintf(lsSql, "INSERT INTO INSTALMENT_BALANCE " "(acct_id, " "acct_item_type_id, " "charge_sum, " "charge_current, " "operation_type, " "state_date, " "state, " "staff_id ) " "VALUES (%s, " "%s, " "0, " "%f, " "'%s', " "sysdate, " "'01', " "%s) " ,acct_id,itypeid,amount,ls_conduct,staff_id); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); if(isqlcode<0) { strcpy(lsTemp,"向INSTALMENT_BALANCE表中插入记录时出错!\n"); strcat(lsTemp,cDatabase->GetSqlErrText()); strcat(lsTemp,"\n"); cDatabase->Rollback(); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } }else { //INSTALMENT_BALANCE表有该合同号记录,更新之 charge_sum=atof(cDatabase->data->GetColData(1,1)); charge_current=atof(cDatabase->data->GetColData(1,2)); if(amount<0 && amount+charge_sum+charge_current<0) { sprintf(lsTemp,"输入的冲帐金额大于了该帐目类型现有预付款(%10.2f元),不能冲帐!", (charge_sum+charge_current)/100); StrReturn(-2,lsTemp); } //更新INSTALMENT_BALANCE表中数据 sprintf(lsSql, "UPDATE INSTALMENT_BALANCE " "SET state_date = sysdate, " "state = '02' " "WHERE acct_id = %s AND " "state = '01' AND " "acct_item_type_id = %s " ,acct_id,itypeid ); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); if(isqlcode<0||cDatabase->GetRowCount()!=1) { strcpy(lsTemp,"更新INSTALMENT_BALANCE表中数据时出错!\n"); strcat(lsTemp,cDatabase->GetSqlErrText()); strcat(lsTemp,"\n"); cDatabase->Rollback(); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } //向INSTALMENT_BALANCE表中插入记录 sprintf(lsSql, "INSERT INTO INSTALMENT_BALANCE " "(acct_id, " "acct_item_type_id, " "charge_sum, " "charge_current, " "operation_type, " "state_date, " "state, " "staff_id ) " "VALUES (%s, " "%s, " "%f, " "%f, " "'%s', " "sysdate, " "'01', " "%s) " ,acct_id,itypeid,charge_sum+charge_current,amount,ls_conduct,staff_id); //userlog(lsSql); cDatabase->DoSql(lsSql); isqlcode=cDatabase->GetSqlCode(); //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText()); if(isqlcode<0) { strcpy(lsTemp,"向INSTALMENT_BALANCE表中插入新记录时出错!\n"); strcat(lsTemp,cDatabase->GetSqlErrText()); strcat(lsTemp,"\n"); cDatabase->Rollback(); if(WriteLog(cDatabase,staff_id,"w_p_installment",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_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } //userlog(paymaxno); 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,'11','%s', " "null,%f, sysdate,%s,'C0C',sysdate,'','') " ,paymaxno,acct_id,acct_seq_nbr,ls_optype,amount,staff_id); //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_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } cDatabase->Commit(); //存取成功将系统时间返回 StrReturn(0,systime); }//------------------------------------------------------------------------//服务PIPrintIv实现函数,分期付款收据打印//传入参数staff_id,acct_id,acct_item_type_id,use_date//------------------------------------------------------------------------void CInstallment::GetPrintInfo(){ char lsSql[2048],lsSqltmp[200],lsTemp[1024],lsErr[500]; char *lparm[10]; char staff_id[20],acct_id[20],itypeid[10]; char use_date[20],systime[20]; int i,isqlcode,lpnum,rpnum; int rt; lpnum=4; rpnum=GetInputParm(pInp,lparm,50); if(rpnum!=lpnum) { lpfree(lparm,rpnum); strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n"); if(WriteLog(cDatabase,"-1","w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-2,lsTemp); } for(i=0;i<lpnum;i++) //userlog("lparm %d: %s",i,lparm[i]); strcpy(staff_id,lparm[0]); strcpy(acct_id,lparm[1]); strcpy(itypeid,lparm[2]); strcpy(use_date,lparm[3]); lpfree(lparm,rpnum); //取收据信息 sprintf(lsSql, "SELECT INSTALMENT_BALANCE.acct_id, " "INSTALMENT_BALANCE.acct_item_type_id, " "INSTALMENT_BALANCE.operation_type, " "(INSTALMENT_BALANCE.charge_sum+INSTALMENT_BALANCE.charge_current)/100.00 charge_sum, " "INSTALMENT_BALANCE.charge_current/100.00 charge_current, " "to_char(INSTALMENT_BALANCE.state_date,'yyyy-mm-dd'), " "INSTALMENT_BALANCE.staff_id " "FROM INSTALMENT_BALANCE " "WHERE ( INSTALMENT_BALANCE.acct_id = %s ) AND " "( INSTALMENT_BALANCE.acct_item_type_id = %s ) AND " "( to_char(INSTALMENT_BALANCE.state_date,'yyyymmdd') = '%s' ) AND " "( INSTALMENT_BALANCE.staff_id = %s ) AND " "( INSTALMENT_BALANCE.state = '01' ) AND " "( INSTALMENT_BALANCE.operation_type = '01' ) " ,acct_id,itypeid,use_date,staff_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"); if(WriteLog(cDatabase,staff_id,"w_p_installment",lsTemp,lsErr)!=1) strcat(lsTemp,lsErr); cDatabase->Commit(); StrReturn(-1,lsTemp); } cDatabase->Commit(); if(isqlcode==0 && cDatabase->GetRowCount()==0) StrReturn(100,NULL); StrReturn(0,cDatabase->GetData()); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -