int F847116(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int hi_cutid = 0; //客户ID int hi_cuttype = 0; //客户类型 int i=0; int ret = 0; int len = 0; char h_showcardid[11] = ""; //显示卡号 char h_password[7] = ""; //卡密码 double h_temp_Card_id = 0; //卡号 char seed_key[17] = ""; //种子密钥 char card_endtime[27 + 1] = ""; //卡的有效截至日期 char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; char sMsg[256]=""; char sMaxCardBalance[20]=""; double dMaxCardBalance=0; double h_temp_Serial_no = 0; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; T_t_pif_card tCard; T_t_aif_account tAccount; T_t_tif_tradeserial tradeserial; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCUST_AUTH2, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_DAMT3,F_LSERIAL1,F_VSMESS,0); memset(&IA,0,sizeof(IA)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tCard, 0, sizeof(tCard)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tSpeFee,0,sizeof(tSpeFee)); #ifdef DEBUG writelog(LOG_DEBUG,"rPack->damt0[%lf]",rPack->damt0); writelog(LOG_DEBUG,"rPack->scust_auth2[%s]",rPack->scust_auth2); #endif hi_cutid = rPack->lvol0; //客户ID hi_cuttype = rPack->lvol3; //客户类别 tradeserial.trade_fee=rPack->damt0; //发生额 des2src(h_showcardid,rPack->scust_no); //显示卡号 getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } if(strlen(h_showcardid) > 0) { ret=IsExistShowCardNo(h_showcardid); if(ret) { *pRetCode = ret; goto L_RETU; } } // 检查客户信息,判断是否可以发行临时卡 ret = IsExistNoLostCardByCustomId(hi_cutid); if (ret) { writelog(LOG_ERR,"hi_cutid[%d]",hi_cutid); *pRetCode = ret; goto L_RETU; } des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 ret=IsExistCardByPhyCardNo(tCard.physical_no); //物理卡号 if(ret) { writelog(LOG_ERR,"physical_no[%s]",tCard.physical_no); *pRetCode = ret; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(hi_cutid, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",hi_cutid); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_cif_customer_free_lock_cur(); //检查金额是否超过最大额度 ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); if(amtcmp(tradeserial.trade_fee,dMaxCardBalance)>0) { writelog(LOG_ERR,"tradeserial.trade_fee[%lf]",tradeserial.trade_fee); *pRetCode=E_AMT_EXCEED_MAX; goto L_RETU; } // 准备数据插入卡信息表 memcpy(seed_key,STATIC_SEED_KEY,sizeof(seed_key)); //读种子密钥 // 默认密码, 初始取身份证的后6位, 没有身份证号用默认密码. trim(rPack->sname2); len=strlen(rPack->sname2) ; if (len >= 6) { strncpy(h_password,&(rPack->sname2[len-6]),6); if(h_password[5]>'9'||h_password[5]<'0') h_password[5]='0'; } else { strcpy(h_password,DEFAULT_CUST_PWD); } ret = getNewUniqNo(KEYTYPE_CARD_ID,&h_temp_Card_id); //获取最大卡号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } tCard.card_id = D2I(h_temp_Card_id); //卡号 des2src(tCard.showid,h_showcardid); //显示卡号 des2src(tCard.is_main,TYPE_YES); //是否为主卡 des2src(tCard.state_id,CARDSTAT_REG); //卡状态 tCard.type_id = CT_TEMP; //卡类别 EncodePwd(seed_key,h_password,tCard.password,0); //卡密码 tCard.cosumer_id = hi_cutid; //客户标识 tCard.account_count = ACCOUNT_COUNT_ONE; //卡对应帐户个数 des2src(tCard.begin_time,logicdate); //注册时间 ret = GetTempCardValiddate(GLOBE_TMPCARDVALIDDATE,logicdate,card_endtime); //计算卡的有效期 if (ret) { *pRetCode = ret; goto L_RETU; } des2src(tCard.end_time, card_endtime); //截至时间 tCard.phytype = PHYTYPE_NO_ONE; //设备物理型号;默认为1 // 插入卡信息 ret = DB_t_pif_card_add(&tCard); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_CARD_E; else *pRetCode = E_DB_CARD_I; goto L_RETU; } ret = InsertToCutUpdList(tCard.card_id,CUTUPD_ADD,tCard.physical_no); if(ret) { *pRetCode = ret; goto L_RETU; } // 准备数据插入帐户信息表 ret = getNewActno(tAccount.account_id); //获得最大帐号 if (ret) { *pRetCode = ret; goto L_RETU; } des2src(tAccount.open_date,logicdate); //开户时间 des2src(tAccount.open_time,systime); tAccount.current_state = ACCOUNTSTAT_REGIST; //当前状态 tAccount.act_type = ACCTYPE_PERMAIN; //帐号类别 tAccount.customer_id = rPack->lvol0; //客户号 des2src(tAccount.cut_name,rPack->sname); //客户名称 tAccount.cut_type = hi_cuttype; //客户类别 des2src(tAccount.stuemp_no,rPack->scust_auth2); //客户学号或员工号 tAccount.card_id = (int)h_temp_Card_id; //关联卡号 tAccount.purse_id = PURSE_NO_ONE; //关联卡钱包号 tAccount.card_type = CT_TEMP; //卡类别 des2src(tAccount.subno,SUBJECT_INDIVIDUALSAVING); //所属科目 des2src(tAccount.isautotra,TYPE_NO); //是否自动转帐 // 插入帐户信息表 ret = DB_t_aif_account_add(&tAccount); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_ACCOUNT_E; else *pRetCode = E_DB_ACCOUNT_I; goto L_RETU; } // 准备数据插入交易流水表 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&h_temp_Serial_no); //获得最大流水号 if(ret) { *pRetCode = ret; goto L_RETU; } tradeserial.serial_no = D2I(h_temp_Serial_no); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_TEMPCARD_OPEN; //交易代码 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.card_id = tCard.card_id; //卡号 des2src(tradeserial.showid,tCard.showid); //显示卡号 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = rPack->lvol0; //客户标识 des2src(tradeserial.oper_code,rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 tradeserial.trade_count=1; //当前卡交易次数 des2src(IA.sArrInActno[0],tAccount.account_id); //帐户 IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; IA.dArrInAmt[0]=tradeserial.trade_fee; IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[1]=rPack->lvol1; IA.iArrInFeeSwitch[2]=rPack->lvol2; IA.iArrInFeeSwitch[3]=rPack->lvol3; IA.iArrInFeeSwitch[4]=rPack->lvol4; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; // 调用入账子模块 ret=process(&IA,&tradeserial); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"process ret[%d]",ret); goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_TOLL_DEPOSIT_TRAD: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_BILL: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_PRE_TOLL_BOARD_TRAD: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: case TXTYPE_RETURN_BOARD_TRAD: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: case TXTYPE_TOLL_CHARGE_TRAD: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: case TXTYPE_TOLL_CARDCOST_TRAD: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,"卡当前余额:%.2lf元",tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); // 插入交易流水表 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } // 返回卡号\密码\显示卡号\客户类型\图书证号\有效截至日期 out_pack->lvol0 = (int)h_temp_Card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,h_showcardid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scust_auth2,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,h_password); //卡密码 des2src(out_pack->sdate0,card_endtime); //有效截至日期 out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->damt3=tradeserial.boardfee; //搭伙费 out_pack->lserial1=tradeserial.serial_no; //流水号 // add by 汤成 2005-8-8 // 增加向名单表写入记录 /* ret = InsertToBlkList((int)h_temp_Card_id,CHCARD_BLACKLIST); if(ret) { *pRetCode = ret; goto L_RETU; } */ PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F846314(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); // ret=pAccTrans->checkCfgUpdate(); // if(ret) // return ret; des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_CARDDRAW; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; trans.purseno=PURSE_NO_ONE; trans.paycnt=rPack->lvol6+1; trans.cardbefbal=rPack->lvol7/100.0; trans.cardaftbal=trans.cardbefbal; // trans.fundtype=PAYTYPE_CASH; des2src(trans.cardphyid,rPack->sstation0); trans.inputamt=rPack->damt0; trans.unusedamt = trans.inputamt; if(amtcmp(trans.inputamt,trans.cardbefbal)>0) { return ERRINFO(E_CARD_BALANCE_SHORTAGE,trans.cardbefbal); } T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(trans,tCard); if(ret) { return ret; } trans.custid=tCard.custid; if(trans.custid) { ret=GetCustBaseInfoByCustID(trans.custid,trans.custname,trans.stuempno,NULL); if(ret) return ret; } ret=UpdateCardBitmap(trans.cardno,trans.paycnt,CARDBITMAPTYPE_SYS_ONLINE); if(ret) return ret; T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } if(tCardAccount.lastpaycnt>trans.paycnt) { return ERRINFO(E_CARDCNT_LT_LASTCARDCNT,trans.paycnt,tCardAccount.lastpaycnt); } strcpy(trans.cardaccno,tCardAccount.accno); trans.feetype=tCard.feetype; trans.custid=tCard.custid; strcpy(trans.draccno,tCardAccount.accno); ret=pAccTrans->doTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; // transdtl.paytype=trans.fundtype; // des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag =TF_PAY; transdtl.cardcnt=trans.paycnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=trans.cardaftbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.custid=trans.custid; des2src(transdtl.custname,trans.custname); des2src(transdtl.stuempno,trans.stuempno); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; des2src(transdtl.showcardno,tCard.showcardno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE0, F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_STIME3,0); outPack->lvol0=tCard.cardno; outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->stime3,pAccTrans->trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal); des2src(outPack->vsmess,trans.remark); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F846334(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_EACCDRAW; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); des2src(trans.eaccno,rPack->sbank_acc); if(!strlen(trans.eaccno)) return E_INPUTNULL_ACCNO; //去帐户信息 T_t_netacc eaccount; memset(&eaccount,0,sizeof(eaccount)); ret=DB_t_netacc_read_by_accno(trans.eaccno,&eaccount); if(ret) { writelog(LOG_ERR,"accno[%s]",trans.eaccno); if(DB_NOTFOUND==ret) return E_NOTEXIST_EACCNO; else return E_DB_ACCOUNT_R; } if(eaccount.status[0]!=STATUS_NORMAL) { return E_EACCNO_LOGOUT; } char seedkey[33]=""; char inpwd_crypt[65]=""; char inpwd_plain[65]=""; char dbpwd_plain[65]=""; des2src(inpwd_crypt,rPack->snote2); if(!strlen(inpwd_crypt)) return E_PWD_NULL; ret=GetSysParaVal(GLOBLE_SYSPARA_STATIC_KEY,seedkey); if(ret) return ret; ret=decrypt_elec_card_pwd(0,seedkey,inpwd_crypt,inpwd_plain); if(ret) return E_EACCPWD; ret=decrypt_elec_card_pwd(0,seedkey,eaccount.accpwd,dbpwd_plain); if(ret) return E_PWD_DECRYPT; if(strcmp(inpwd_plain,dbpwd_plain)!=0) return E_EACCPWD; if(eaccount.stoppayflag[0]=='1') return E_EACC_STOPPAY; pAccTrans->trans.inputamt=rPack->damt0; if(amtcmp(pAccTrans->trans.inputamt,0)==0) return E_INPUT_AMT_NULL; if(amtcmp(pAccTrans->trans.inputamt,eaccount.balance)>0) return E_BALANCE_SHORTAGE; // 创建账号 pAccTrans->trans.custid=eaccount.custid; pAccTrans->trans.fundtype=0; ret=pAccTrans->doTrans(); if(ret) return ret; SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(outPack->sdate3,pAccTrans->trans.sysdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(outPack->vsmess,"%s %s 帐户余额:%.2f元",eaccount.accname,pAccTrans->remark.c_str(),pAccTrans->trans.draccaftbal); des2src(trans.remark,outPack->vsmess); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847106(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret =0; char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; int type=0; InAcc IA; double dSerialNo = 0; int card_id=0; char physical_no[41]=""; char sMaxCardBalance[20]=""; char sMsg[256]=""; double dMaxCardBalance=0; T_t_tif_tradeserial tradeserial; T_t_pif_card tCard; T_t_tif_savdtl tSavdtl; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; T_t_aif_account tAccount; //帐户表 ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tSavdtl,0,sizeof(tSavdtl)); memset(&tCard,0,sizeof(tCard)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&IA,0,sizeof(IA)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_VSMESS,0); if(amtcmp(rPack->damt0,0)<=0) { *pRetCode=E_INPUT_AMT; goto L_RETU; } if(amtcmp(rPack->damt1,0)<0) { *pRetCode=E_INPUT_CARD_BALA; goto L_RETU; } if(rPack->lvol10<1) { *pRetCode=E_INPUT_CARD_TXCNT; goto L_RETU; } card_id=rPack->lvol0; tradeserial.trade_fee = rPack->damt0; //充值金额 des2src(physical_no, rPack->sbank_acc); //物理卡号 getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } ret=DB_t_pif_card_read_by_card_id(card_id, &tCard); if(ret) { if(DB_NOTFOUND==ret) *pRetCode=E_CARDNO_NOT_EXIST; else *pRetCode=E_DB_CARD_R; goto L_RETU; } if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0) { if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode = E_CARDNO_LOGOUT; else if('3'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode = E_CARD_CHANGE; else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE) *pRetCode=E_CARDNO_LOST; else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) *pRetCode=E_CARDNO_FREEZE; else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } trim(physical_no); trim(tCard.physical_no); if(strcmp(tCard.physical_no,physical_no)!=0) { writelog(LOG_ERR,"db physical_no[%s],input physical_no[%s]",tCard.physical_no,physical_no); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } //根据卡号和钱包号得到消费者账号(借方) ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id, PURSE_NO_ONE,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_by_card_id_and_purse_id ret[%d]card_id[%d]",ret,card_id); if(DB_NOTFOUND==ret) *pRetCode=E_ACTNO_NOT_EXIST; else *pRetCode=E_DB_ACCOUNT_R; goto L_RETU; } ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); if(amtcmp(tAccount.cur_bala+tradeserial.trade_fee,dMaxCardBalance)>0) { *pRetCode= E_AMT_EXCEED_MAX; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(0==tCustomer.fee_type) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_cif_customer_free_lock_cur(); type=rPack->lvol4; //交易类型 IA.dArrInAmt[0]=tradeserial.trade_fee; switch(type) { case TYPE_CASH: //现金 IA.iArrInFeeSwitch[1]=1; break; case TYPE_BILL: //支票 IA.iArrInFeeSwitch[2]=1; break; case TYPE_FUNDBOOK: //经费本 IA.iArrInFeeSwitch[3]=1; break; case TYPE_TRAD: //财务收款 IA.iArrInFeeSwitch[4]=1; break; default: *pRetCode=E_INPUT_DEPOSIT_TYPE; goto L_RETU; } ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR," ERRCODE = [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(dSerialNo); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_SAVING_CASH; tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.card_id =card_id; //卡号 tradeserial.purse_id = rPack->lvol1; //钱包号 //tradeserial.customer_id = rPack->lvol2; //客户标识 tradeserial.customer_id = tCustomer.cut_id; tradeserial.in_balance=rPack->damt1; tradeserial.trade_count=rPack->lvol10+1; //交易次数 Strncpy_t(tradeserial.oper_code , rPack->scust_limit, sizeof(tradeserial.oper_code)); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 switch(type) { case TYPE_CASH: //现金 break; case TYPE_BILL: //支票 case TYPE_FUNDBOOK: //经费本 case TYPE_TRAD: //财务收款 case TYPE_OTHER: //其他 tSavdtl.amount=rPack->damt0; //发生额 if(amtcmp(tSavdtl.amount,0)<=0) break; des2src(tSavdtl.bill_no,rPack->sphone); //票据号码 if(strlen(tSavdtl.bill_no)<1) { *pRetCode=E_INPUT_BILLNO; goto L_RETU; } tSavdtl.card_no=tCard.card_id; //卡号 des2src(tSavdtl.oper_no,rPack->scust_limit); //操作员 tSavdtl.seqno=tradeserial.serial_no; //流水号 des2src(tSavdtl.tx_date,sysdate); //发生日期 des2src(tSavdtl.tx_time,systime); //发生时间 tSavdtl.cnt=1; //票据数量 tSavdtl.bill_type=type; //票据类型 tSavdtl.tx_code=tradeserial.serial_type; //交易码 ret=DB_t_tif_savdtl_add(&tSavdtl); if(ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_SAVDTL_E; else *pRetCode = E_DB_SAVDTL_I; goto L_RETU; } break; default: *pRetCode=E_TXCODE_NOT_EXIST; goto L_RETU; } des2src(IA.sArrInActno[0],tAccount.account_id); //帐户 IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; IA.dArrInAmt[0]=tradeserial.trade_fee; IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_TOLL_DEPOSIT_TRAD: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_BILL: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_PRE_TOLL_BOARD_TRAD: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: case TXTYPE_RETURN_BOARD_TRAD: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: case TXTYPE_TOLL_CHARGE_TRAD: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: case TXTYPE_TOLL_CARDCOST_TRAD: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,"充值前卡余额:%.2lf元 卡当前余额:%.2lf元",tradeserial.in_balance,tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->damt3=tradeserial.boardfee; //搭伙费 out_pack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F849021(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; T_t_pif_cut_relation relation; T_t_pif_cut_relation_tmp input_relation; T_t_cif_customer customer; int i; int count; int flag; ST_CPACK aPack; ST_PACK * out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SCUST_LIMIT,F_VSMESS,0); memset(&input_relation,0,sizeof input_relation); des2src(input_relation.batch_no,in_pack->scust_limit); input_relation.seqno = in_pack->lvol0; if(1 == input_relation.seqno) { ret = DynamicStmtExecute("DELETE FROM YKT_CUR.T_PIF_CUT_RELATION_TMP "); if(ret) { if(DB_NOTFOUND != ret) { *pRetCode = ret; goto L_RETU; } } getsysdatetime(input_relation.batch_no); } else if(strlen(input_relation.batch_no) != 14) { *pRetCode=E_INPUT_BATCH_NO; goto L_RETU; } input_relation.cut_id = in_pack->lvol1; if(0 == input_relation.cut_id) { if(strlen(in_pack->scust_auth) == 0) { *pRetCode = E_INPUT_STUEMP_NO; sprintf(szMsg,"第[%d]条记录客户号与学工号都为空",input_relation.seqno); writelog(LOG_DEBUG,szMsg); goto L_RETU; } memset(&customer,0,sizeof customer); //查询学工号 //ret = GetCutInfoByStuempnoAndArea(in_pack->scust_auth,in_pack->lvol2,&customer); if(ret) { sprintf(szMsg,"学工号[%s]校区[%d]客户不存在" ,in_pack->scust_auth,in_pack->lvol2); writelog(LOG_DEBUG,szMsg); *pRetCode = ret; goto L_RETU; } input_relation.cut_id = customer.cut_id; } sprintf(input_relation.comment,"操作员%s",in_pack->scust_no); des2src(input_relation.outside_no,in_pack->sbank_acc); input_relation.outside_type = CUT_RELATION_TYPE_BANK; ret = DB_t_pif_cut_relation_tmp_add(&input_relation); if(ret) { if(DB_REPEAT == ret) { if(1 == input_relation.seqno) { //批次号重复 for(i=0;i<3;i++) { sleep(1); getsysdatetime(input_relation.batch_no); ret=DB_t_pif_cut_relation_tmp_add(&input_relation); if(ret) { if(DB_REPEAT==ret) continue; else { *pRetCode=E_DB_CUT_RLTN_TMP_I; goto L_RETU; } } break; } if(i >= 3) { *pRetCode = E_DB_CUT_RLTN_TMP_E; writelog(LOG_ERR,"batch_no[%s],seqno[%d]",input_relation.batch_no,input_relation.seqno); goto L_RETU; } } else { *pRetCode = E_DB_CUT_RLTN_TMP_E; writelog(LOG_ERR,"batch_no[%s],seqno[%d]",input_relation.batch_no,input_relation.seqno); goto L_RETU; } } else { *pRetCode = E_DB_CUT_RLTN_TMP_I; writelog(LOG_ERR,"batch_no[%s],seqno[%d]",input_relation.batch_no,input_relation.seqno); goto L_RETU; } } flag = 1; if('1' == in_pack->scust_type[0] ) { //最后一条记录已经导入 ret = DB_t_pif_cut_relation_tmp_open_select_by_c1_and_batch_no( input_relation.batch_no); if(ret) { *pRetCode = E_DB_CUT_RLTN_TMP_R; goto L_RETU; } count = 0; while(1) { memset(&input_relation,0,sizeof input_relation); ret = DB_t_pif_cut_relation_tmp_fetch_select_by_c1(&input_relation); if(ret) { if(DB_NOTFOUND == ret) break; *pRetCode = E_DB_CUT_RLTN_TMP_R; goto L_RETU; } relation.cut_id = input_relation.cut_id; relation.outside_type = input_relation.outside_type; des2src(relation.outside_no,input_relation.outside_no); des2src(relation.comment,input_relation.comment); ret = DB_t_pif_cut_relation_add(&relation); if(ret) { DB_t_pif_cut_relation_tmp_close_select_by_c1(); memset(&customer,0,sizeof customer); DB_t_cif_customer_read_by_cut_id(input_relation.cut_id,&customer); if(DB_REPEAT == ret) { sprintf(szMsg,"导入序号[%d],学工号[%s],校区[%d]已存在" ,input_relation.seqno,customer.stuemp_no,customer.area); writelog(LOG_ERR,szMsg); *pRetCode = E_DB_CUT_RLTN_I; goto L_RETU; } else { sprintf(szMsg,"导入序号[%d],学工号[%s],校区[%d]有误,不能导入" ,input_relation.seqno,customer.stuemp_no,customer.area); writelog(LOG_ERR,szMsg); *pRetCode = E_DB_CUT_RLTN_I; goto L_RETU; } } count++; } sprintf(out_pack->vsmess,"批次号:%s,共成功导入%d条客户信息",input_relation.batch_no,count); flag=2; } if(2 != flag) { sprintf(out_pack->vsmess,"导入第%d记录,批次号:%s",input_relation.seqno,input_relation.batch_no); } des2src(out_pack->scust_limit,input_relation.batch_no); PutRow(handle,out_pack,pRetCode,szMsg); writelog(LOG_DEBUG,out_pack->vsmess); return 0; L_RETU: return -1; }
int F849003(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->CheckCfgUpdate(); if(ret) return ret; T_t_authcard tAuthCard; T_t_transdtl transdtl; T_t_dpsoper tDepositOper; T_t_dpsoperpos tDepositOperpos; T_t_dpsshoppos tDepositShoppos; T_t_shop tDepositShop; T_t_account tAccount; //帐户表 ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tAuthCard,0,sizeof(tAuthCard)); memset(&tDepositOper,0,sizeof(tDepositOper)); memset(&tDepositOperpos,0,sizeof(tDepositOperpos)); memset(&tDepositShoppos,0,sizeof(tDepositShoppos)); memset(&tDepositShop,0,sizeof(tDepositShop)); memset(&tAccount,0,sizeof(tAccount)); memset(&transdtl,0,sizeof(transdtl)); int opercardno=rPack->lvol3; //操作员号 if(!opercardno) return E_INPUTNULL_CARDNO; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol5; trans.purseno=PURSE_NO_ONE; trans.cardbefbal=rPack->lvol9/100.0; //入卡金额 trans.cardaftbal=trans.cardbefbal; trans.dpscnt= rPack->lvol7; //入卡金额 trans.inputamt= rPack->lvol8/100.0; //充值金额 trans.unusedamt = trans.inputamt; trans.fundtype=1; ret=IsWaterExceptCard(trans.cardno); if(ret) { ERRTIP("卡号[%d]水控余额异常,充值功能暂停使用,请联系一卡通管理中心处理!!!",trans.cardno); return ERRIF_CARDACC_EXCEPT; } T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(trans,tCard); if(ret) { return ret; } trans.feetype=tCard.feetype; trans.cardtype=tCard.cardtype; // ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INC,0); // if(ret) // return ret; transdtl.sysid= rPack->lcert_code; //上传工作站标识(前置机注册号) des2src(transdtl.devphyid, rPack->sphone3); //物理设备ID transdtl.devseqno=rPack->lvol4; //上传端流水号 // 读取操作员号 ret = DB_t_authcard_read_by_cardno(opercardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"get operator code from auth card error, auth_card_id[%d]",opercardno); if(DB_NOTFOUND == ret) return E_DB_AUTHCARD_N; else return E_DB_OPERATOR_R; } if(tAuthCard.status[0]!=STATUS_NORMAL) { return E_OPERLOGON_UNREG; } des2src(trans.opercode,tAuthCard.opercode); ret=GetDevIdByDevPhyId(&(trans.termid),transdtl.devphyid); if (ret) { writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] devphy999_id[%s]",ret,transdtl.devphyid); return ret; } ret=DB_t_dpsoper_read_lock_by_c0_and_opercode(trans.opercode,&tDepositOper); if(ret) { if(DB_NOTFOUND==ret) return E_DB_DEPOSITOPER_R; else return E_DB_DEPOSITOPER_N; } if(tDepositOper.status[0]!=STATUS_NORMAL) { DB_t_dpsoper_free_lock_by_c0(); return E_DEPOSITOPER_STOP; } //判断是否是重复交易 if(tDepositOper.lastdevseqno==transdtl.devseqno) { DB_t_dpsoper_free_lock_by_c0(); ret=DB_t_transdtl_read_by_accdate_and_termid_and_devseqno(trans.accdate,trans.termid,tDepositOper.lastdevseqno,&transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } //if(transdtl.revflag[0]=='1') // return E_TRANSDTL_REV; ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0); out_pack->lvol5 = transdtl.cardno; out_pack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0); out_pack->lcert_code = transdtl.termseqno; writelog(LOG_INFO,"该交易已成功,卡号[%d]充值金额[%.2lf]卡余额[%.2lf]",transdtl.cardno,transdtl.amount,transdtl.cardaftbal); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } if(strncmp(tDepositOper.lasttransdate,trans.transdate,8)!=0) { des2src(tDepositOper.lasttransdate,trans.transdate); tDepositOper.depositcnt=0; tDepositOper.depositamt=0; } tDepositOper.depositcnt++; tDepositOper.depositamt+=trans.inputamt; tDepositOper.lastdevseqno=transdtl.devseqno; des2src(tDepositOper.lastdevphyid,transdtl.devphyid); des2src(tDepositOper.lastsaved,trans.sysdatetime); if(amtcmp(tDepositOper.maxdepositamt,0)>0) { DB_t_dpsoper_free_lock_by_c0(); if(amtcmp(tDepositOper.depositamt,tDepositOper.maxdepositamt)>0) { return E_OPER_OVER_MAX_DEPOSIT_AMT; } } ret=DB_t_dpsoper_update_lock_by_c0(&tDepositOper); if(ret) { return E_DB_DEPOSITOPER_U; } if('1'==tDepositOper.shopoperflag[0]) { ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid); return E_DB_DEPOSITSHOPPOS_N; } else { return E_DB_DEPOSITSHOPPOS_R; } } ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tDepositShop); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_SHOPID,tDepositShoppos.shopid); else return E_DB_SHOP_R; } if(tDepositShop.status[0]!=STATUS_NORMAL) { return ERRINFO(E_SHOP_LOGOUT,tDepositShop.shopid); } trans.transcode = TC_SHOPPOSDEPOSIT; des2src(trans.shopaccno,tDepositShop.accno); writelog(LOG_INFO,"充值商户充值"); } else { ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos); if(ret) { if(DB_NOTFOUND!=ret) { writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid); return E_DB_DEPOSITSHOPPOS_R; } } else { ERRTIP("设备号[%d]属于属于充值商户,非充值商户操作员不能使用该设备",trans.termid); return E_COMMON_ERR; } trans.transcode = TC_POSDEPOSIT; } ret=pAccTrans->InitTrans(); if(ret) return ret; //根据卡号和钱包号得到消费者账号(借方) ret=DB_t_account_read_by_accno(tCard.accno,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_account_read_by_accno ret[%d]cardno[%d]accno[%s]",ret,trans.cardno,tCard.accno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_ACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } if(tAccount.lastdpscnt>trans.dpscnt) { return ERRINFO(E_CARDCNT_LT_LASTCARDCNT,trans.dpscnt,tAccount.lastdpscnt); } // double CardMaxBal=0; // ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); // if(ret) // return ret; // if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0) // return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); trans.custid=tCard.custid; des2src(trans.cardaccno,tAccount.accno); ret=pAccTrans->doTrans(); if(ret) return ret; des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag=TF_DPS; transdtl.cardcnt=trans.dpscnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=trans.custid; transdtl.showcardno=atol(tCard.showcardno); des2src(transdtl.custname,tAccount.accname); des2src(transdtl.opercode,trans.opercode); GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } sprintf(trans.remark,"卡号%d 充值前卡余额:%.2lf元 卡当前余额:%.2lf元",trans.cardno,trans.cardbefbal,trans.cardaftbal); writelog(LOG_INFO,trans.remark); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0); out_pack->lvol5 = trans.cardno; out_pack->lvol10 = (int)D4U5(trans.cardaftbal*100,0); out_pack->lcert_code = trans.termseqno; PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F240157(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret =0; char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; InAcc IA; double dUniqno = 0; int card_id=0; int iSerialno=0; char physical_no[41]=""; char sMaxCardBalance[20]=""; char sMsg[256]=""; double dMaxCardBalance=0; T_t_pif_card tCard; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; T_t_aif_account tAccount; //帐户表 T_t_tif_tradeserial tradeserial; T_t_tif_diff_transfer tDiffTransfer; T_t_tif_report_trans_comp rpttrans_comp; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tCard,0,sizeof(tCard)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tAccount,0,sizeof(tAccount)); memset(&tDiffTransfer,0,sizeof(tDiffTransfer)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&IA,0,sizeof(IA)); ResetNormalCPack(&aPack,0,1); if(amtcmp(rPack->damt1,0)==0) { *pRetCode=E_INPUT_AMT; goto L_RETU; } trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); if(strlen(rPack->scust_limit)==0) { *pRetCode=E_OPER_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scust_limit2)==0) { *pRetCode=E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if(strcmp(rPack->scust_limit,rPack->scust_limit2)==0) { writelog(LOG_ERR,"oper[%s]auth_oper[%s]",rPack->scust_limit,rPack->scust_limit2); *pRetCode=E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret=chk_oper_pwd(rPack->scust_limit2,rPack->semp_pwd); if(ret) { if(E_OPER_NOT_EXIST==ret) *pRetCode=E_AUTH_OPER_NOT_EXIST; else if(E_PASSWORD_WRONG==ret) *pRetCode=E_AUTH_OPER_PWD; else *pRetCode=ret; goto L_RETU; } card_id=rPack->lvol0; des2src(physical_no, rPack->sbank_acc); //物理卡号 getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } ret=DB_t_pif_card_read_by_card_id(card_id, &tCard); if(ret) { writelog(LOG_ERR,"card_id[%d]",card_id); if(DB_NOTFOUND==ret) *pRetCode=E_CARDNO_NOT_EXIST; else *pRetCode=E_DB_CARD_R; goto L_RETU; } if(card_id!=tCard.card_id) { writelog(LOG_ERR,"card_id[%d] db card_id[%d]",card_id,tCard.card_id); *pRetCode=E_DB_CARD_R; goto L_RETU; } if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0) { if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_CARDNO_LOGOUT; else if('3'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_CARD_CHANGE; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_LOST]) *pRetCode=E_CARDNO_LOST; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_FREEZE]) *pRetCode=E_CARDNO_FREEZE; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_WFAIL]) *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } trim(physical_no); trim(tCard.physical_no); if(strcmp(tCard.physical_no,physical_no)!=0) { writelog(LOG_ERR,"db physical_no[%s],input physical_no[%s]",tCard.physical_no,physical_no); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } iSerialno=rPack->lserial0; ret=DB_t_tif_diff_transfer_read_lock_by_c0_and_op_date_and_local_sn(rPack->sdate0,iSerialno,&tDiffTransfer); if(ret) { writelog(LOG_ERR,"operater_date[%s]Serialno[%d]",rPack->sdate0,iSerialno); if(DB_NOTFOUND==ret) *pRetCode=E_SERIALNO_NOT_EXIST; else *pRetCode=E_DB_TRADESERIAL_R; goto L_RETU; } if(card_id!=tDiffTransfer.card_id) { writelog(LOG_ERR,"input card_id [%d],DiffTransfer card_id[%d]",card_id,tDiffTransfer.card_id); DB_t_tif_diff_transfer_free_lock_by_c0(); *pRetCode=E_CARDNO_SERIAL_NE; goto L_RETU; } if(SERISTAT_NODEBT!=tDiffTransfer.status) { DB_t_tif_diff_transfer_free_lock_by_c0(); *pRetCode=E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } if(amtcmp(tDiffTransfer.diff_amt,rPack->damt1)!=0) { DB_t_tif_diff_transfer_free_lock_by_c0(); *pRetCode=E_INPUT_AMT; goto L_RETU; } tDiffTransfer.status=SERISTAT_DEBT; ret=DB_t_tif_diff_transfer_update_lock_by_c0(&tDiffTransfer); if(ret) { *pRetCode=E_DB_DIFF_TRANSFER_U; goto L_RETU; } DB_t_tif_diff_transfer_free_lock_by_c0(); //根据卡号和钱包号得到消费者账号(借方) ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id, PURSE_NO_ONE,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_by_card_id_and_purse_id ret[%d]card_id[%d]",ret,card_id); if(DB_NOTFOUND==ret) *pRetCode=E_ACTNO_NOT_EXIST; else *pRetCode=E_DB_ACCOUNT_R; goto L_RETU; } ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); tradeserial.trade_fee = rPack->damt1; //充值金额 if(amtcmp(tAccount.cur_bala+tradeserial.trade_fee,dMaxCardBalance)>0) { *pRetCode= E_AMT_EXCEED_MAX; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_cif_customer_free_lock_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR," ERRCODE = [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(dUniqno); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_MAKEUPSERIAL; tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 // tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.card_id =card_id; //卡号 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = tCard.cosumer_id; //客户标识 tradeserial.in_balance=rPack->damt0; //入卡值 tradeserial.trade_count=rPack->lvol1+1; //交易次数 des2src(tradeserial.oper_code,rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 des2src(IA.sArrInActno[0],tAccount.account_id); //帐户 IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; IA.dArrInAmt[0]=tradeserial.trade_fee; IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[1]=rPack->lvol1; IA.iArrInFeeSwitch[2]=rPack->lvol2; IA.iArrInFeeSwitch[3]=rPack->lvol3; IA.iArrInFeeSwitch[4]=rPack->lvol4; IA.iArrInFeeSwitch[5]=rPack->lvol5; ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: tradeserial.in_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } writelog(LOG_DEBUG,out_pack->vsmess); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_DAMT4,F_VSMESS,0); out_pack->lserial1=tradeserial.serial_no; //流水号 out_pack->damt2=tradeserial.trade_fee; //充值金额 out_pack->damt3=tradeserial.boardfee; //搭伙费 out_pack->damt4=tradeserial.out_balance; //出卡值 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } memset(&rpttrans_comp,0,sizeof rpttrans_comp); /* ret = DB_t_tif_report_trans_comp_read_by_cmp_date(sysdate,&rpttrans_comp); if(ret) { if(DB_NOTFOUND != ret) { *pRetCode = E_DB_RPT_TRANS_COMP_R; goto L_RETU; } des2src(rpttrans_comp.cmp_date,sysdate); rpttrans_comp.localauto_num = 1; rpttrans_comp.localauto_amt = tradeserial.trade_fee; ret = DB_t_tif_report_trans_comp_add(&rpttrans_comp); if(ret) { *pRetCode = E_DB_RPT_TRANS_COMP_I; goto L_RETU; } } else { rpttrans_comp.localauto_num += 1; rpttrans_comp.localauto_amt += tradeserial.trade_fee; ret = DB_t_tif_report_trans_comp_update_by_cmp_date(sysdate,&rpttrans_comp); if(ret) { *pRetCode = E_DB_RPT_TRANS_COMP_U; goto L_RETU; } } */ ret = DB_t_tif_report_trans_comp_read_by_cmp_date(tDiffTransfer.op_date,&rpttrans_comp); if(ret) { *pRetCode = E_DB_RPT_TRANS_COMP_R; goto L_RETU; } rpttrans_comp.localauto_num += 1; rpttrans_comp.localauto_amt += tradeserial.trade_fee; ret = DB_t_tif_report_trans_comp_update_by_cmp_date(tDiffTransfer.op_date,&rpttrans_comp); if(ret) { *pRetCode = E_DB_RPT_TRANS_COMP_U; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847163(TRUSERID * handle, int iRequest, ST_PACK * rPack, int *pRetCode, char *szMsg) { int ret = 0; double maxfeeratio = 0; //比率 double amt=0; ST_CPACK aPack; ST_PACK *pp = &(aPack.pack); // T_t_cif_cuttypefee cuttypefee; ResetNormalCPack(&aPack, 0, 1); SetCol(handle, 0); SetCol(handle,F_DAMT1,F_DAMT2,F_DAMT3,F_DAMT4,F_DAMT5,0); PutRow(handle, pp, pRetCode, szMsg); return 0; // memset(&cuttypefee,0,sizeof(cuttypefee)); // writelog(LOG_DEBUG, "rPack->lvol0[%d]", rPack->lvol0); //客户类别 // writelog(LOG_DEBUG, "rPack->lvol1[%d]", rPack->lvol1); //交易码 // writelog(LOG_DEBUG, "rPack->damt0[%lf]", rPack->damt0); //发生额 /* ret=DB_t_cif_cuttypefee_read_by_cut_type(rPack->lvol0,&cuttypefee); if(ret) { writelog(LOG_ERR,"cuttype[%d]",rPack->lvol0); if(DB_NOTFOUND==ret) *pRetCode=E_CUTTYPE_NOT_EXIST; else *pRetCode=E_CUTTYPEFEE_R; goto L_RETU; } switch(rPack->lvol1) { case 847101: //发行正式卡(新生卡,不收任何费用) if(IS_YES==cuttypefee.is_firstcostfee) { pp->damt3= cuttypefee.deposit_fee; //押金金额 pp->damt4=0; pp->damt5 = cuttypefee.in_fee; //手续费 } else { pp->damt3=0; //押金金额 pp->damt4=0; pp->damt5=0; } break; case 847104: //补办卡 if(IS_NO!=rPack->lvol2) { pp->damt4 =cuttypefee.cost_fee; //卡成本费 } pp->damt3=0; //押金金额 pp->damt5 = 0; //手续费 break; case 847126: //发行VIP卡 pp->damt3=0; //押金金额 pp->damt4 =cuttypefee.cost_fee; //卡成本费 pp->damt5 = 0; //手续费 break; case 847116: //发行过渡临时卡 case 847125: //发行非记名临时卡 pp->damt3= cuttypefee.deposit_fee; //押金金额 pp->damt4=0; pp->damt5 = 0; //手续费 break; case 847124: //发行记名临时卡 pp->damt3= cuttypefee.deposit_fee; //押金金额 pp->damt4=0; pp->damt5 = cuttypefee.in_fee; //手续费 break; default: *pRetCode=E_TXCODE_NOT_EXIST; goto L_RETU; } amt=rPack->damt0-(pp->damt3+pp->damt4+pp->damt5); if(amtcmp(amt,0)<0) { *pRetCode=E_CASH_LACK; goto L_RETU; } if(strncmp(cuttypefee.is_outfee,TYPE_YES,1)==0) { ret=GetMaxFeeRatioFromShop(&maxfeeratio); if(ret) { *pRetCode=ret; goto L_RETU; } pp->damt2=D4U5(amt*maxfeeratio,2); //预扣搭伙费 } // pp->damt1=D4U5(amt-pp->damt2,2); //出卡值, PutRow(handle, pp, pRetCode, szMsg); return 0; L_RETU: return -1; */ }
int F260006(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; FILE *fp = NULL; BANK_COMPARE_RECODE compare_record; // 对账文件记录描述 memset(&compare_record, 0, sizeof(compare_record)); char comp_file_path[256] = ""; ST_PACK ArrayPack; // 设置返回包 ST_CPACK aPack; // 设置应答包 ST_CPACK sPack; // 设置发送包 ResetNormalCPack(&aPack, 0, 1); memset(&ArrayPack, 0, sizeof(ArrayPack)); // 向后台发写卡失败 ResetNormalCPack(&sPack, 0, 1); sPack.head.RequestType = 240007; SetHeadCol(&sPack, F_LVOL0, F_LVOL1, F_SCUST_AUTH, F_SCUST_AUTH2, F_SORDER0, F_SEMP_NO, F_SCUST_TYPE, F_SORDER1, F_SCARD1, 0); // 设置发送windows BU的头部视图信息 memcpy(&(sPack.pack), in_pack, sizeof(sPack.pack)); des2src(comp_file_path, in_pack->vsvarstr0); // 对账文件路径名:BANK0320080414.txt writelog(LOG_ERR,"branch_no[%d], base_funcno[%d]",g_Bank.DRTP_BRANCH,g_Bank.BCC_BASEFUNCNO); if ((fp = fopen(comp_file_path, "rb")) == NULL) { writelog(LOG_ERR,"Open indirect file error,file=[%s]", comp_file_path); goto L_retu; } while (1) { if (NULL == fgets((char *)(&compare_record), sizeof(BANK_COMPARE_RECODE), fp)) // 获取对账文件的数据记录 { writelog(LOG_ERR,"fgets error local_sn=[%s]", compare_record.LocalSn); break; } sPack.pack.lvol0 = 0; des2src(sPack.pack.scust_auth, compare_record.BankCard); des2src(sPack.pack.scust_auth2, compare_record.BankSn); des2src(sPack.pack.sorder0, compare_record.GDCAccount); des2src(sPack.pack.semp_no, compare_record.LocalSn); des2src(sPack.pack.scust_type, compare_record.TradeCode); des2src(sPack.pack.sorder1, compare_record.TransMomoy); des2src(sPack.pack.scard1, in_pack->sbank_acc); // 文件名:BANK0320080414.txt ret = ExtCall(0, g_Bank.DRTP_BRANCH, g_Bank.BCC_BASEFUNCNO, 0, g_Bank.TIMEOUT, &sPack, &aPack, &ArrayPack); if (ret < 0 || aPack.head.retCode != 0) { if (ret < 0) { writelog(LOG_ERR,"Call 240007 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode); strcpy(szMsg,"调用后台业务失败,业务终止"); goto L_retu; } else { writelog(LOG_ERR,"Call 240007 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode); strcpy(szMsg,aPack.pack.vsmess); goto L_retu; } } } sPack.pack.lvol0 = 1; des2src(sPack.pack.scard1, in_pack->sbank_acc); ret = ExtCall(0, g_Bank.DRTP_BRANCH, g_Bank.BCC_BASEFUNCNO, 0, g_Bank.TIMEOUT, &sPack, &aPack, &ArrayPack); if (ret < 0 || aPack.head.retCode != 0) { if (ret < 0) { writelog(LOG_ERR,"Call 240007 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode); strcpy(szMsg,"调用后台业务失败,业务终止"); goto L_retu; } else { writelog(LOG_ERR,"Call 240007 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode); strcpy(szMsg,aPack.pack.vsmess); goto L_retu; } } if (fclose(fp)) { writelog(LOG_ERR,"Close file error,file=[%s]", comp_file_path); goto L_retu; } SetCol(handle,0); SetCol(handle,F_VSMESS,0); PutRow(handle, &aPack.pack, pRetCode, szMsg); return 0; L_retu: return -1; }
int F846312(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret=0; char sysdate[9]=""; char systime[7]=""; char sMsg[256]=""; char anonymflag[2]=""; int cardno=0; int cardtype=0; int feetype=0; int cardflag=0; int returnForgiftFlag=0; char cardphyid[9]=""; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); CARDTRANSINFO cti; memset(&cti,0,sizeof(cti)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->checkCfgUpdate(); if(ret) return ret; pAccTrans->clear(); ret=pAccTrans->initOperDtl(rPack->semp); if(ret) return ret; GetCpackDataString(rPack,pAccTrans->cpackdata); pAccTrans->trans.transcode=TC_CARDDEPOSIT; ret=pAccTrans->addOperDtl(); if(ret) return ret; T_t_cardtransdtl cardtransdtl; memset(&cardtransdtl,0,sizeof(cardtransdtl)); des2src(cardtransdtl.transdate,trans.transdate); des2src(cardtransdtl.transtime,trans.transtime); des2src(cardtransdtl.accdate,trans.accdate); des2src(cardtransdtl.acctime,trans.transtime); cardtransdtl.termid=trans.termid; cardtransdtl.termseqno=trans.termseqno; cardtransdtl.transcode=trans.transcode; cardtransdtl.paytype=rPack->lvol9; des2src(cardtransdtl.voucherno,rPack->scust_auth2); cardtransdtl.cardno=rPack->lvol0; cardtransdtl.purseno=PURSE_NO_ONE; cardtransdtl.cardcnt=rPack->lvol6+1; cardtransdtl.cardbefbal=rPack->lvol7/100.0; cardtransdtl.amount=rPack->damt0; // cardtransdtl.cardaftbal=rPack->lvol8; // cardtransdtl.siteno=rPack->lcert_code; // cardtransdtl.frontno=0; //des2src(cardtransdtl.devphyid,rPack->sname); //cardtransdtl.devseqno=rPack->lserial0; //des2src(cardtransdtl.bankcode,rPack->sbank_code); //des2src(cardtransdtl.bankcardno,rPack->scard0); //des2src(cardtransdtl.mobile,rPack->sphone2); des2src(cardtransdtl.opercode,rPack->semp); cardtransdtl.status[0]=DTLSTATUS_SUCCESS; cardtransdtl.revflag[0]='0'; cardtransdtl.errcode=0; // des2src(cardtransdtl.remark,rPack->ssectypes); //检查客户 trans.cardno=rPack->lvol0; cti.cardno=rPack->lvol0; cti.purseno=PURSE_NO_ONE; cti.cardcnt=rPack->lvol6+1; cti.cardbefbal=rPack->lvol7/100.0; des2src(cti.cardphyid,rPack->sstation0); cti.cardflag=1; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(trans,cti,tCard); if(ret) { return ret; } T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_cardno_and_purseno(cti.cardno,cti.purseno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDACCNO; else return E_DB_CARDACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return E_CARDACC_LOGOUT; } strcpy(cti.cardaccno,tCardAccount.accno); memcpy(&pAccTrans->cti,&cti,sizeof(cti)); pAccTrans->trans.feetype=tCard.feetype; strcpy(pAccTrans->trans.craccno,tCardAccount.accno); pAccTrans->trans.usecardflag=1; pAccTrans->trans.custid=tCard.custid; ////////////////////////////// pAccTrans->trans.fundtype=rPack->lvol9; pAccTrans->trans.inputamt=rPack->damt0; if(pAccTrans->trans.inputamt+cti.cardbefbal>=tCardAccount.cardmaxbal) return E_AMT_EXCEED_MAX; ret=pAccTrans->doFeeTrans(); if(ret) return ret; pAccTrans->trans.feetype=tCard.feetype; strcpy(pAccTrans->trans.craccno,tCardAccount.accno); pAccTrans->trans.usecardflag=1; pAccTrans->trans.custid=tCard.custid; ret=pAccTrans->doMainTrans(); if(ret) return ret; if(pAccTrans->trans.unusedamt>0) return E_INPUT_AMT; if(pAccTrans->trans.unusedamt<0) return E_AMT_LACK; cardtransdtl.cardaftbal=pAccTrans->trans.cardaftbal; cardtransdtl.custid=tCard.custid; ret=DB_t_cardtransdtl_add(&cardtransdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDTRANSDTL_E; else return E_DB_CARDTRANSDTL_I; } SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE0, F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); outPack->lvol0=tCard.cardno; outPack->lvol8=pAccTrans->trans.cardaftbal*100; des2src(outPack->sdate3,trans.accdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; char temp[128]=""; sprintf(temp,"卡余额:%.2f",pAccTrans->trans.cardaftbal); pAccTrans->remark+=temp; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F846305(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret=0; char sysdate[9]=""; char systime[7]=""; char sMsg[256]=""; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->checkCfgUpdate(); if(ret) return ret; pAccTrans->clear(); ret=pAccTrans->initOperDtl(rPack->semp); if(ret) return ret; GetCpackDataString(rPack,pAccTrans->cpackdata); pAccTrans->trans.transcode=TC_CARDRENEW; ret=pAccTrans->addOperDtl(); if(ret) return ret; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); //检查操作员 //检查客户 T_t_customer tCustomer; T_t_card tOldCard; memset(&tCustomer,0,sizeof(tCustomer)); memset(&tOldCard,0,sizeof(tOldCard)); int cardno=rPack->lvol0; ret=check(cardno,tCustomer,tOldCard); if(ret) return ret; //注销原卡 ret=DB_t_card_read_lock_by_cur_and_cardno(tOldCard.cardno,&tOldCard); if(ret) { writelog(LOG_ERR,"lost_cardno[%d]",tOldCard.cardno); if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } tOldCard.status[0]=STATUS_LOGOUT; //注销 des2src(tOldCard.closedate,sysdate); //注销日期 ret=DB_t_card_update_lock_by_cur(&tOldCard); if(ret) { writelog(LOG_ERR,"lost_cardno[%d]",tOldCard.cardno); if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } //使用卡片 T_t_card tCard; memset(&tCard,0,sizeof(tCard)); des2src(tCard.cardphyid,rPack->sstation0); des2src(tCard.showcardno,rPack->sorder0); des2src(tCard.expiredate,tOldCard.expiredate); tCard.cardtype=tOldCard.cardtype; tCard.feetype=tOldCard.feetype; des2src(tCard.cardpwd,tOldCard.cardpwd); ret=chkShowCardNo(trans.opercode,tCard.cardtype,tCard.showcardno); if(ret) { return ret; } char cardpwd[33]=""; char key[17]=""; //get_init_passwd_by_man_id(tCustomer.idno,cardpwd); strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tOldCard.cardpwd, 1); ret=AddCard(tCustomer,tCard); if(ret) return ret; //添加卡片使用明细 T_t_carddtl tCarddtl; memset(&tCarddtl,0,sizeof(tCarddtl)); /////////////////////////////////rPack2TableStuct//////////////////////// des2src(tCarddtl.accdate,trans.accdate); tCarddtl.termid=trans.termid; tCarddtl.termseqno=trans.termseqno; tCarddtl.cardtype=tCard.cardtype; des2src(tCarddtl.showcardno,tCard.showcardno); des2src(tCarddtl.cardphyid,tCard.cardphyid); tCarddtl.cardusetype[0]=CARDUSETYPE_OPENCARD; des2src(tCarddtl.opercode,trans.opercode); ret=DB_t_carddtl_add(&tCarddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } //添加换卡记录 T_t_cardinstead tCardinstead; memset(&tCardinstead,0,sizeof(tCardinstead)); des2src(tCardinstead.accdate,trans.accdate); tCardinstead.termid=trans.termid; tCardinstead.termseqno=trans.termseqno; tCardinstead.oldcardno=tOldCard.cardno; des2src(tCardinstead.oldcardphyid,tOldCard.cardphyid); tCardinstead.cardno=tCard.cardno; des2src(tCardinstead.cardphyid,tCard.cardphyid); ret=DB_t_cardinstead_add(&tCardinstead); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDINSTEAD_E; else return E_DB_CARDINSTEAD_I; } //插入卡位图表 T_t_cardbitmap tCardBitmap; tCardBitmap.cardno=tCard.cardno; tCardBitmap.baseno=0; memset(tCardBitmap.bitmap,'0',sizeof(tCardBitmap.bitmap)); tCardBitmap.bitmap[0]='1'; ret=DB_t_cardbitmap_add(&tCardBitmap); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDBITMAP_E; else return E_DB_CARDBITMAP_I; } T_t_account tCardaccount; memset(&tCardaccount,0,sizeof(tCardaccount)); ret=DB_t_account_read_lock_by_c1_and_cardno_and_purseno(tOldCard.cardno,PURSE_NO_ONE,&tCardaccount); if(ret) { if(DB_NOTFOUND==ret) return E_DB_ACCOUNT_N; else return E_DB_ACCOUNT_R; } tCardaccount.cardno=tCard.cardno; //考虑补助 tCardaccount.availbal= tCardaccount.availbal+ tCardaccount.subsidybal; tCardaccount.subsidybal=0; tCardaccount.lastcardcnt=1; tCardaccount.lastcardbal=tCardaccount.availbal; getsysdate(tCardaccount.lasttransdate); ret=DB_t_account_update_lock_by_c1(&tCardaccount); if(ret) { return E_DB_ACCOUNT_U; } /////////////////////////////// pAccTrans->trans.usecardflag=1; pAccTrans->trans.custid=tCustomer.custid; pAccTrans->trans.feetype=tCard.feetype; ////////////////////////////// pAccTrans->trans.fundtype=rPack->lvol9; pAccTrans->trans.inputamt=rPack->damt0; des2src(pAccTrans->cti.cardaccno,tCardaccount.accno); pAccTrans->cti.cardno=tCardaccount.cardno; pAccTrans->cti.purseno=tCardaccount.purseno; pAccTrans->cti.cardtype=tCard.cardtype; pAccTrans->cti.cardbefbal=0; pAccTrans->cti.cardaftbal=0; pAccTrans->cti.cardcnt=1; pAccTrans->cti.calaftbalflag=0; ret=pAccTrans->doAccTrans(); if(ret) return ret; T_t_cardtransdtl cardtransdtl; memset(&cardtransdtl,0,sizeof(cardtransdtl)); strcpy(cardtransdtl.transdate,trans.transdate); strcpy(cardtransdtl.transtime,trans.transtime); strcpy(cardtransdtl.accdate,trans.accdate); strcpy(cardtransdtl.acctime,trans.acctime); cardtransdtl.termid=trans.termid; cardtransdtl.termseqno=trans.termseqno; cardtransdtl.transcode=trans.transcode; des2src(cardtransdtl.opercode,trans.opercode); cardtransdtl.status[0]=DTLSTATUS_SUCCESS; cardtransdtl.errcode=0; ret=DB_t_cardtransdtl_add(&cardtransdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDTRANSDTL_E; else return E_DB_CARDTRANSDTL_I; } SetCol(handle,F_LVOL1,F_LSAFE_LEVEL2,F_LVOL5, F_SALL_NAME,F_SPAGER,F_SCERT_NO, F_SEMAIL2,F_SMARKET_CODE,F_SDATE0, F_LVOL0,F_STX_PWD,F_LVOL8, F_SORDER0,F_SDATE3,F_SEMP, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); outPack->lvol1=tCustomer.custid; outPack->lsafe_level2=tCustomer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,tCustomer.custname); des2src(outPack->spager,tCustomer.stuempno); des2src(outPack->scert_no,tCustomer.deptcode); des2src(outPack->semail2,tCustomer.idno); des2src(outPack->smarket_code,tCustomer.sex); des2src(outPack->sdate0,tCard.expiredate); outPack->lvol0=tCard.cardno; des2src(outPack->stx_pwd,cardpwd); outPack->lvol8=0; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,trans.accdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F950053(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->CheckCfgUpdate(); if(ret) return ret; int lastdevseqno=rPack->lvol4; char devphyid[31]=""; des2src(devphyid,rPack->sdate1); T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); ret=DB_t_transdtl_read_by_accdate_and_devphyid_and_devseqno(trans.transdate,devphyid,lastdevseqno,&transdtl); if(ret) { writelog(LOG_ERR,"transdate[%s]devphyid[%s]devseqno[%d]",trans.transdate,devphyid,lastdevseqno); if(DB_NOTFOUND==ret) return 0; else return E_DB_TRANSDTL_R; } if(transdtl.revflag[0]=='1') { return 0; } ret=GetDevIdByDevPhyId(&(trans.termid),devphyid); if(ret) { return ret; } pAccTrans->GetTermSeqno(); if(transdtl.transcode==TC_POSDEPOSIT) pAccTrans->trans.transcode=TC_POSDEPOSITREV; else if(transdtl.transcode==TC_SHOPPOSDEPOSIT) pAccTrans->trans.transcode=TC_SHOPPOSDEPOSITREV; else return E_TRANSCODE_NOT_SAVING; ret=doReverse(transdtl.accdate,transdtl.termid,transdtl.termseqno); if(ret) return ret; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0); outPack->lvol5 = transdtl.cardno; outPack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0); outPack->lcert_code = transdtl.termseqno; // outPack->lvol0=pAccTrans->trans.cardno; // outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0); // des2src(outPack->sdate3,pAccTrans->sysPara.sSettleDate); // des2src(outPack->semp,pAccTrans->trans.opercode); // outPack->lserial1=pAccTrans->trans.termseqno; sprintf(outPack->vsmess,"冲正金额%.2lf 卡余额%.2lf",trans.transamt,trans.cardaftbal); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F240002(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); pAccTrans->trans.transcode=TC_BANKTRANS; TRANS& trans=pAccTrans->trans; trans.termid=atoi(rPack->sorder2); ret=pAccTrans->InitTrans(); if(ret) return ret; trans.inputamt = rPack->lvol5/100.0; trans.unusedamt=trans.inputamt; trans.cardflag=1; trans.usecardflag=1; trans.cardbefbal=rPack->lvol6/100.00; trans.dpscnt=rPack->lvol1+1; trans.cardaftbal=trans.cardbefbal; //转账不允许转小数金额 if((rPack->lvol5)%100>0) { writelog(LOG_ERR,"trans money is not a integer!,transmoney=[%f]",rPack->lvol5/100.0); strcpy(szMsg,"转账金额必须是整数"); return E_TRANS_TRANSMONEY_OUTRANGE; } if(rPack->lvol5<1) { writelog(LOG_ERR,"trans money is not a integer!,transmoney=[%f]",rPack->lvol5/100.0); strcpy(szMsg,"转账金额不能为0"); return E_TRANS_TRANSMONEY_OUTRANGE; } T_t_account tAccount; //帐户表 T_t_card card; memset(&tAccount,0,sizeof(tAccount)); memset(&card,0,sizeof(card)); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_DAMT0,F_DAMT1,F_DAMT2,F_LVOL1,F_LVOL2,F_LSERIAL0,F_SNAME2,0); //判断设备是否登陆 if(0!=device_login_yes_or_no(trans.termid)) { writelog(LOG_ERR,"Device don't login"); return E_TRANS_TERM_NOLOGIN; } trans.cardno=atoi(rPack->sserial0); ret=pAccTrans->CheckAcc(&card,&tAccount); if(ret) return ret; if(amtcmp(trans.cardbefbal-tAccount.balance,MAXAMT_CARDGTACC)>=0) { writelog(LOG_ERR,"cardbefbal[%.2lf]account balance[%.2lf]",trans.cardbefbal,tAccount.balance); return ERRIF_CARDBAL_EXCEPT; } double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); if(ret) return ret; if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); trans.feetype=card.feetype; trans.cardtype=card.cardtype; trans.custid=card.custid; des2src(trans.cardaccno,tAccount.accno); //贷方帐户,持卡人账户 des2src(trans.draccno,rPack->sstation0); //借方帐号,由前置机上传 ret=pAccTrans->doFeeTrans(); if(ret) return ret; ret=pAccTrans->doMainTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; //业务结束后,回滚事务 ret=db_rollback(); if(ret) { writelog(LOG_ERR,"db_rollback error,error code=[%d]",ret); return E_DB_ROLLBACK; } //重新取流水号 ret=pAccTrans->GetTermSeqno(); if(ret) { writelog(LOG_ERR,"GetTermSeqno error,error code=[%d]",ret); return ret; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag=TF_DPS; transdtl.cardcnt=trans.dpscnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=card.custid; //transdtl.sysid= rPack->lvol2; transdtl.exttype=EXTTYPE_BANKCARD; des2src(transdtl.extdata,rPack->scust_auth); des2src(transdtl.showcardno,card.showcardno); transdtl.status[0]=DTLSTATUS_FAIL; ret=GetNewRefno(transdtl.refno); if(ret) { ERRTIP("取交易参考号失败"); return ret; } GetCustBaseInfoByCustID(card.custid,transdtl.custname,transdtl.stuempno,NULL); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } char sMsg[255]=""; char sDebugMsg[255]=""; sprintf(sDebugMsg,"流水号:%d ",trans.termseqno); sprintf(sMsg,"充值前卡余额:%.2lf 转帐后卡余额:%.2lf ",trans.cardbefbal,trans.cardaftbal); strcat(sDebugMsg,sMsg); writelog(LOG_DEBUG,sDebugMsg); des2src(out_pack->sname2,transdtl.refno); out_pack->lserial0=trans.termseqno; out_pack->damt0=trans.cardaftbal; out_pack->damt1=transdtl.amount; out_pack->damt2=transdtl.managefee; out_pack->lvol1=transdtl.termseqno; out_pack->lvol2=D2I(trans.cardaftbal*100); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F841609(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int CustomerCount=0; int start_no=0; char temp[256] =""; CAccTrans *pAccTrans=CAccTrans::getInstance(); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSMESS,0); CustomerCount=rPack->lvol0;// 数量 T_t_customer tCustomer; memset(&tCustomer,0,sizeof tCustomer); //先增加客户 ret = GetSysParaVal(GLOBE_FLAG_TEMPCARD_CUTTYPE,temp); if(ret) { ERRTIP("系统参数表没有配置参数标识为14的临时卡的客户类别"); return ret; } tCustomer.custtype=atoi(temp); T_t_custtype tCustType; memset(&tCustType,0,sizeof(tCustType)); ret=DB_t_custtype_read_by_custtype(tCustomer.custtype,&tCustType); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTTYPE,tCustomer.custtype); else return E_DB_CUSTTYPE_R; } if(tCustType.feetype < 1) { ERRTIP("客户类别[%d]类别名称[%s]没有设置收费类别",tCustType.custtype,tCustType.custtypename); return E_COMMON_ERR; } tCustomer.feetype=tCustType.feetype; T_t_feetype tFeetype; memset(&tFeetype,0,sizeof tFeetype); ret = DB_t_feetype_read_by_feetype(tCustomer.feetype,&tFeetype); if(ret) { if(DB_NOTFOUND == ret) { return ERRINFO(E_NOTEXIST_FEETYPE,tCustomer.feetype); } else return E_DB_FEETYPE_R; } tCustomer.status[0]=STATUS_NORMAL; strcpy(tCustomer.custname,"临时人员"); //客户名称 tCustomer.custattr[0]='2'; //身份禁用标志1-禁用2-启用 tCustomer.useflag[0]='0'; strcpy(tCustomer.areacode,rPack->sbranch_code0); //校区 strcpy(tCustomer.batchno,pAccTrans->trans.sysdatetime); strcpy(tCustomer.opendate,pAccTrans->trans.accdate); for(int i=0;i<CustomerCount;i++) { ret=GetNewCustIDByShoolCode(rPack->sbranch_code0,tCustomer.custid); if(ret) { writelog(LOG_ERR,"school_code[%s]",rPack->sbranch_code0); return ret; } ret=DB_t_customer_add(&tCustomer); if(ret) { writelog(LOG_ERR,"DB_t_customer_add ret[%d]",ret); if(DB_REPEAT==ret) return ERRINFO(E_DB_CUSTOMER_E,tCustomer.custid); else return E_DB_CUSTOMER_I; } if(0==i) start_no=tCustomer.custid; } sprintf(out_pack->vsmess,"生成批次号%s,客户号从%d到%d共%d个客户自动生成完成",tCustomer.batchno,start_no,tCustomer.custid,CustomerCount); PutRow(handle,out_pack,pRetCode,szMsg); //writelog(LOG_DEBUG,out_pack->vsmess); return 0; }
int F847128(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char transdate[12]=""; char devphyid[30]=""; int devseqno=0; int cardno=0; int deviceid=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_MANUALDRCR; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); //水控消费 T_t_purseposdtl purseposdtl; memset(&purseposdtl,0,sizeof purseposdtl); T_t_shop shop; memset(&shop,0,sizeof shop); T_t_account account; memset(&account,0,sizeof account); ResetNormalCPack(&aPack,0,1); des2src(transdate,rPack->sdate0); deviceid=rPack->lwithdraw_flag; devseqno=rPack->lserial1; cardno=rPack->lvol0; trans.inputamt=rPack->damt0; trans.unusedamt = trans.inputamt; trans.transamt=trans.inputamt; if(amtcmp(trans.inputamt,0)==0) { return E_INPUT_AMT_NULL; } ret=DB_t_purseposdtl_read_lock_by_c1_and_transdate_and_termid_and_devseqno_and_cardno(transdate,deviceid,devseqno,cardno,&purseposdtl); if (ret) { if(DB_NOTFOUND==ret) E_DB_PURSEPOSDTL_N; else return E_DB_PURSEPOSDTL_R; } if(!trans.cardaccno) { ret=GetShopidByDevphyid(purseposdtl.devphyid,purseposdtl.transdate,purseposdtl.transtime,deviceid,purseposdtl.shopid); if(ret) { return ret; } } ret=DB_t_shop_read_by_shopid(purseposdtl.shopid,&shop); if(ret) { writelog(LOG_ERR,"DB_t_shop_read_by_shop_id ret[%d],shopid[%d]",ret,rPack->lserial0); if(DB_NOTFOUND==ret) { return E_NOTEXIST_SHOPACCNO; } else return E_DB_SHOP_R; } ret=DB_t_account_read_by_cardno(cardno,&account); if (rPack->lvol1) { ret=DB_t_account_read_by_cardno(rPack->lvol1,&account); if(ret) { if(DB_NOTFOUND == ret) return E_DB_ACCOUNT_R; } } des2src(trans.draccno,shop.accno); des2src(trans.craccno,account.accno); des2src(trans.chkopercode,rPack->semp_no); pAccTrans->trans.fundtype=0; pAccTrans->trans.transtype=TRANSTYPE_MANDRCR; ret=pAccTrans->DoTransByTransType(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; des2src(purseposdtl.status,"4"); ret=DB_t_purseposdtl_update_lock_by_c1(&purseposdtl); if(ret) return ret; DB_t_purseposdtl_free_lock_by_c1(); sprintf(trans.remark,"交易金额%.2lf,借方账户[%s]余额%.2lf,贷方账户[%s]余额%.2lf",trans.totaltransamt,trans.draccname,trans.draccaftbal,trans.craccname,trans.craccaftbal); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL8,F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lvol1=rPack->lvol1; outPack->lvol0=cardno; //卡号 outPack->lvol2=trans.transamt*100;//交易金额 sprintf(outPack->vsmess,"%s 借方账户[%s]贷方帐户[%s]",pAccTrans->remark.c_str(),pAccTrans->trans.draccname,trans.craccname); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F847110(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret=0; int card_id=0; T_t_pif_card tCard; T_t_pif_spefee tSpeFee; T_t_cif_customer tCustomer; T_t_aif_account tAccount; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); memset(&tCard,0,sizeof(tCard)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tAccount,0,sizeof(tAccount)); card_id = in_pack->lvol0; //卡标识 //判断卡状态是否为写卡未成功状态 ret=DB_t_pif_card_read_by_card_id(card_id, &tCard); if(ret) { writelog(LOG_ERR,"card_id[%d]",card_id); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_R; goto L_RETU; } if(card_id!=tCard.card_id) { writelog(LOG_ERR,"card_id[%d] db card_id[%d]",card_id,tCard.card_id); *pRetCode=E_DB_CARD_R; goto L_RETU; } if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0) { if(tCard.state_id[CARDSTAT_TYPE_REG]!=STATE_TRUE) { *pRetCode=E_CARDNO_LOGOUT; goto L_RETU; } else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE) { *pRetCode=E_CARDNO_LOST; goto L_RETU; } else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) { *pRetCode=E_CARDNO_FREEZE; goto L_RETU; } //else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) //*pRetCode=E_CARDNO_WFAIL; } //得到收费类别 ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_cif_customer_free_lock_cur(); ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id,0,&tAccount); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_ACTNO_NOT_EXIST; else *pRetCode= E_DB_ACCOUNT_R; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_DAMT0,F_LVOL1,F_LVOL5,F_SDATE0,F_LVOL0,F_SNAME,F_SNAME2,F_SCUST_AUTH,F_SSERIAL0,F_SCUST_AUTH2,F_SCUST_TYPE,F_SCUST_LIMIT,F_SCUST_NO,F_SBANK_ACC,0); out_pack->lvol0 = tCard.card_id; //卡标识 out_pack->damt0=D4U5(tAccount.cur_freebala,2); //卡余额 des2src(out_pack->sdate0,tCard.end_time); //有效截止日期 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->sname,tCustomer.cut_name); //学生\员工姓名 des2src(out_pack->sserial0,tCustomer.classdept_no); //单位代码 des2src(out_pack->scust_auth2,tCustomer.man_id); //身份证号 des2src(out_pack->scust_type,tCustomer.sex); //性别 des2src(out_pack->scust_limit,tCustomer.stuemp_no); //学号\员工号 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->scust_no,tCard.showid); //显示卡号 des2src(out_pack->sbank_acc,tCard.physical_no); //物理卡号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847124(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int hi_cutid = 0; //客户ID int hi_cuttype = 0; //客户类型 int i=0; int ret = 0; int len = 0; char h_showcardid[11] = ""; //显示卡号 char h_password[7] = ""; //卡密码 double h_temp_Card_id = 0; //卡号 char seed_key[17] = ""; //种子密钥 char card_endtime[8 + 1] = ""; //卡的有效截至日期 char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; char sMsg[256]=""; char sMaxCardBalance[20]=""; double dMaxCardBalance=0; int type=0; //充值类型 T_t_pif_card tCard; T_t_cif_customer tCustomer; T_t_aif_account tAccount; T_t_tif_tradeserial tradeserial; T_t_tif_savdtl tSavdtl; T_t_pif_spefee tSpeFee; double h_temp_Serial_no = 0; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&IA,0,sizeof(IA)); memset(&tCard, 0, sizeof(tCard)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSavdtl,0,sizeof(tSavdtl)); ResetNormalCPack(&aPack,0,1); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCERT_NO, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_LSERIAL1,F_VSMESS, F_SORDER0,F_SORDER1,F_SORDER2, F_SHOLDER_AC_NO,F_SSTAT_TYPE,F_SSTAT_TYPE2, F_SNATION_CODE,F_SBRANCH_CODE0, 0); hi_cutid = rPack->lvol0; //客户ID hi_cuttype = rPack->lvol3; //客户类别 //满足大学城的需求,用客户号替代显示卡号 //des2src(h_showcardid,rPack->scust_no); //显示卡号 sprintf(h_showcardid,"%010d",hi_cutid); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } //检查客户信息,判断是否可以发行卡 des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 trim(h_showcardid); if(strlen(h_showcardid)) { ret=IsExistShowCardNo(h_showcardid); if(ret) { *pRetCode = ret; goto L_RETU; } } ret=IsExistCardByPhyCardNo(tCard.physical_no); if(ret) { *pRetCode = ret; goto L_RETU; } ret=IsExistCardByCustomId(hi_cutid); if (ret) { *pRetCode = ret; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(hi_cutid, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",hi_cutid); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 } tCustomer.use_flag[0]='1'; ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } DB_t_cif_customer_free_lock_cur(); tradeserial.trade_fee =rPack->damt0; //检查金额是否超过最大额度 ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); if(amtcmp(tradeserial.trade_fee,dMaxCardBalance)>0) { writelog(LOG_ERR,"tradeserial.trade_fee[%lf]",tradeserial.trade_fee); *pRetCode=E_AMT_EXCEED_MAX; goto L_RETU; } // 准备数据插入卡信息表 memcpy(seed_key,STATIC_SEED_KEY,sizeof(seed_key)); //读种子密钥 ret=IsInvalidDateTime(rPack->sdate0,"YYYYMMDD"); if(ret) { *pRetCode = E_INPUT_DATE; goto L_RETU; } if(strncmp(rPack->sdate0,sysdate,8)<=0) { *pRetCode=E_INPUT_DATE; goto L_RETU; } des2src(card_endtime,rPack->sdate0); /* ret = GetCardValiddate(hi_cuttype,logicdate,card_endtime); //计算卡的有效期 if (ret) { *pRetCode = ret; goto L_RETU; } */ //规则如下: 当发卡人在系统中的证件类别为身份证并有身份证号时,卡密码取身份证的后六位数字(例如...987654321则为654321;...98765432X则为765432),否则都为“888888”。 if(strcmp(tCustomer.man_idtype,"1")==0) { get_init_passwd_by_man_id(tCustomer.man_id,h_password); } else strcpy(h_password,DEFAULT_CUST_PWD); ret = getNewUniqNo(KEYTYPE_CARD_ID,&h_temp_Card_id); //获取最大卡号 if(ret) { *pRetCode = ret; goto L_RETU; } tCard.card_id = D2I(h_temp_Card_id); //卡号 des2src(tCard.showid,h_showcardid); //显示卡号 des2src(tCard.is_main,TYPE_YES); //是否为主卡 des2src(tCard.state_id,CARDSTAT_REG); //卡状态 tCard.type_id = CT_TEMP_NAME; //卡类别 EncodePwd(seed_key,h_password,tCard.password,0); //卡密码 tCard.cosumer_id = hi_cutid; //客户标识 tCard.account_count = ACCOUNT_COUNT_ONE; //卡对应帐户个数 des2src(tCard.begin_time,logicdate); //注册时间 des2src(tCard.end_time, card_endtime); //截至时间 tCard.phytype = PHYTYPE_NO_ONE; //设备物理型号;默认为1 // 插入卡信息 ret = DB_t_pif_card_add(&tCard); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_CARD_E; else *pRetCode = E_DB_CARD_I; goto L_RETU; } // 准备数据插入帐户信息表 ret = getNewActno(tAccount.account_id); //获得最大帐号 if (ret) { *pRetCode = ret; goto L_RETU; } des2src(tAccount.open_date,sysdate); //开户时间 des2src(tAccount.open_time,systime); tAccount.current_state = ACCOUNTSTAT_REGIST; //当前状态 tAccount.act_type = ACCTYPE_PERMAIN; //帐号类别 tAccount.customer_id = rPack->lvol0; //客户号 des2src(tAccount.cut_name,rPack->sname); //客户名称 tAccount.cut_type = hi_cuttype; //客户类别 des2src(tAccount.stuemp_no,rPack->scust_auth2); //客户学号或员工号 tAccount.card_id = tCard.card_id; //关联卡号 tAccount.purse_id = PURSE_NO_ONE; //关联卡钱包号 tAccount.card_type = tCard.type_id; //卡类别 des2src(tAccount.subno,SUBJECT_INDIVIDUALSAVING); //所属科目 des2src(tAccount.isautotra,TYPE_NO); //是否自动转帐 // 插入帐户信息表 ret = DB_t_aif_account_add(&tAccount); if (ret) { writelog(LOG_ERR,"ret [%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_ACCOUNT_E; else *pRetCode = E_DB_ACCOUNT_I; goto L_RETU; } ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&h_temp_Serial_no); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(h_temp_Serial_no); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type=TXCODE_CARD_OPEN_TMP_CASH; //交易码 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.card_id = tCard.card_id; //卡号 des2src(tradeserial.showid,tCard.showid); //显示卡号 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = hi_cutid; //客户标识 des2src(tradeserial.oper_code , rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 tradeserial.trade_count=1; //当前卡交易次数 type=rPack->lvol4; //交易类型 IA.dArrInAmt[0]=tradeserial.trade_fee; switch(type) { case TYPE_CASH: //现金 IA.iArrInFeeSwitch[1]=1; break; case TYPE_BILL: //支票 IA.iArrInFeeSwitch[2]=1; break; case TYPE_FUNDBOOK: //经费本 IA.iArrInFeeSwitch[3]=1; break; default: *pRetCode=E_INPUT_DEPOSIT_TYPE; goto L_RETU; } switch(type) { case TYPE_CASH: //现金 break; case TYPE_BILL: //支票 case TYPE_FUNDBOOK: //经费本 tSavdtl.amount=rPack->damt0; //发生额 if(amtcmp(tSavdtl.amount,0)<=0) break; des2src(tSavdtl.bill_no,rPack->sphone); //票据号码 if(strlen(tSavdtl.bill_no)<1) { *pRetCode=E_INPUT_BILLNO; goto L_RETU; } tSavdtl.card_no=tCard.card_id; //卡号 des2src(tSavdtl.oper_no,rPack->scust_limit); //操作员 tSavdtl.seqno=tradeserial.serial_no; //流水号 des2src(tSavdtl.tx_date,logicdate); //发生日期 des2src(tSavdtl.tx_time,systime); //发生时间 tSavdtl.cnt=1; //票据数量 tSavdtl.bill_type=type; //票据类型 tSavdtl.tx_code=tradeserial.serial_type; //交易码 ret=DB_t_tif_savdtl_add(&tSavdtl); if(ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_SAVDTL_E; else *pRetCode = E_DB_SAVDTL_I; goto L_RETU; } break; default: *pRetCode=E_TXCODE_NOT_EXIST; goto L_RETU; } des2src(IA.sArrInActno[0],tAccount.account_id); //帐户 IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; //调用入账子模块 ret=process(&IA,&tradeserial); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"process ret[%d]",ret); goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_BILL: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,"卡当前余额:%.2lf元",tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); // 插入交易流水表 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } // 返回卡号\密码\显示卡号\客户类型\图书证号\有效截至日期 out_pack->lvol0 = (int)h_temp_Card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,h_showcardid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scert_no,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,h_password); //卡密码 des2src(out_pack->sdate0,card_endtime); //有效截至日期 strcpy(out_pack->sorder0,CARD_STRUCT_VERSION); //制卡版本号 strcpy(out_pack->sorder1,CARD_REGISTER_PUBLISH_CODE); //发卡注册标识号 strcpy(out_pack->sorder2,CARD_REGISTER_SERVICE_CODE); //服务注册标识号 sprintf(out_pack->sholder_ac_no,"%ld",tCustomer.cut_id); //客户号 des2src(out_pack->sstat_type,tCustomer.man_idtype); //证件类型 des2src(out_pack->snation_code,tCustomer.country); //国籍 sprintf(out_pack->sstat_type2,"%d",tCustomer.nation); //民族 des2src(out_pack->sbranch_code0,tCustomer.school_code); //院校代码 out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F930021(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int msgid=0; T_t_msglist tMsgList; T_t_device tDevice; T_t_device tPDev; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMsgList,0,sizeof(tMsgList)); memset(&tDevice,0,sizeof(tDevice)); memset(&tPDev,0,sizeof tPDev); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } ret=get_devinfo_by_phyid(in_pack->sdate0,&tDevice); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"get_devinfo_by_phyid err[%d]",ret); goto L_RETU; } if((ret = DB_t_device_read_by_deviceid(tDevice.fdeviceid,&tPDev))) { *pRetCode = ret; goto L_RETU; } AddXmlItemStr(tMsgList.reqdata,XML_KEY_DEV999_ID, tDevice.devphyid); AddXmlItemInt(tMsgList.reqdata,XML_KEY_DEV999_NO, tDevice.deviceno); AddXmlItemStr(tMsgList.reqdata,XML_KEY_DEVTYPE,tDevice.devtypecode); AddXmlItemStr(tMsgList.reqdata,XML_KEY_DEVVERSION, tDevice.devverno); AddXmlItemStr(tMsgList.reqdata,XML_KEY_CARDSTR, tDevice.cardphytype); AddXmlItemStr(tMsgList.reqdata,XML_KEY_VCARDSET, tDevice.cardset); AddXmlItemInt(tMsgList.reqdata, XML_KEY_PORTCOUNT, tDevice.svrportcnt); AddXmlItemStr(tMsgList.reqdata, XML_KEY_FDEVPHY_ID, tPDev.devphyid); AddXmlItemInt(tMsgList.reqdata, XML_KEY_PORTNO,tDevice.svrportno); AddXmlItemStr(tMsgList.reqdata, XML_KEY_status, tDevice.status); AddXmlItemInt(tMsgList.reqdata,XML_KEY_JOINMODE,tDevice.commtype); AddXmlItemStr(tMsgList.reqdata, XML_KEY_COMADD, tDevice.ip); AddXmlItemInt(tMsgList.reqdata, XML_KEY_PORT, tDevice.portno); AddXmlItemInt(tMsgList.reqdata, XML_KEY_BAUDRATE, tDevice.baudrate); AddXmlItemInt(tMsgList.reqdata, XML_KEY_COMTYPE,tDevice.commtype); AddXmlItemStr(tMsgList.reqdata, XML_KEY_NOTVALIDITY, "091231000000"); AddXmlItemStr(tMsgList.reqdata, XML_KEY_VERNUM,tDevice.cardverno); // AddXmlItemInt(tMsgList.reqdata, XML_KEY_LASTTRASERNO, tDevice.lasttraserno); // AddXmlItemStr(tMsgList.reqdata, XML_KEY_LASTTRADATE, tDevice.lasttradate); // AddXmlItemInt(tMsgList.reqdata, XML_KEY_LASTSHUTSERNO, tDevice.lastshutserno); // AddXmlItemStr(tMsgList.reqdata, XML_KEY_LASTSHUTDATE, tDevice.lastshutdate); tMsgList.deviceid = tDevice.deviceid; tMsgList.funcno = 930021; tMsgList.msglevel = 3; ret=AddMsgLst(&tMsgList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMsgList.funcno) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } msgid=tMsgList.msgid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0; (cnt<10)&&(tMsgList.errcode!=0); cnt++) { sleep(1); memset(&tMsgList,0,sizeof(tMsgList)); ret=DB_t_msglist_read_by_msgid(msgid, &tMsgList); if(ret) { writelog(LOG_ERR,"DB_t_msglist_read_by_msgid err[%d]",ret); *pRetCode=E_DB_MSGLIST_R; goto L_RETU; } } switch(tMsgList.errcode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMsgList.errmsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F900077(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret=0; char tradecode[6+1]=""; // 此处检查银行登陆状态,可能过于严格,可转移到switch中需要银行登陆的功能中 if(!BANK_LOGIN) { *pRetCode=E_TRANS_BANK_NETERR; return *pRetCode; } INNER_TRANS_REQUEST from_pos,to_pos; //BANK_TRANS_REQUEST from_bank; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); // 用于根据请求包整理本CPACK包的头清空包头位图和包体中的数据 ResetNormalCPack(&aPack,0,1); //初始化交换结构 memset(&from_pos,0,sizeof(from_pos)); //从输入cpack中提取数据,填充到通用交换数据结构中 memcpy(from_pos.TradeCode,in_pack->sclose_emp,sizeof(from_pos.TradeCode)); //交易代码 memcpy(from_pos.TransMoney,in_pack->sorder0,sizeof(from_pos.TransMoney)); //交易金额 memcpy(from_pos.ExtraMoney,in_pack->sorder1,sizeof(from_pos.ExtraMoney)); //附加交易金额 Strncpy_t(from_pos.AccountMoney,in_pack->sserial1,sizeof(from_pos.AccountMoney)); //校园卡帐户金额 from_pos.SendNo=in_pack->lvol0; //发起方流水号 from_pos.RecvNo=in_pack->lvol1; //接受方流水号 memcpy(from_pos.TradeDate,in_pack->sdate0,sizeof(from_pos.TradeDate)); //交易日期 YYYYMMDD memcpy(from_pos.TradeTime,in_pack->stime0,sizeof(from_pos.TradeTime)); //交易时间 HHMMSS memcpy(from_pos.BankDate,in_pack->sdate1,sizeof(from_pos.BankDate)); //银行处理日期 memcpy(from_pos.BankTime,in_pack->stime1,sizeof(from_pos.BankTime)); //银行处理时间 memcpy(from_pos.Balance,in_pack->scust_no,sizeof(from_pos.Balance)); //银行卡余额 memcpy(from_pos.RetCode,in_pack->schange_emp,sizeof(from_pos.RetCode)); //交易结果 memcpy(from_pos.CardNo,in_pack->sserial0,sizeof(from_pos.CardNo)); //校园卡卡号 from_pos.Notecase=in_pack->lvol2; //校园卡对应钱包号 memcpy(from_pos.BankCardNo,in_pack->scust_auth,sizeof(from_pos.BankCardNo)); //银行卡号 from_pos.MngFeeFlag=atoi(in_pack->sstatus1); //手续费标志 memcpy(from_pos.AccountPwd,in_pack->semp_pwd,sizeof(from_pos.AccountPwd)); //校园账户密码 memcpy(from_pos.AccountNewPwd,in_pack->semp_pwd2,sizeof(from_pos.AccountNewPwd)); //校园账户新密码 memcpy(from_pos.BankCardPwd,in_pack->sstation0,sizeof(from_pos.BankCardPwd)); //银行账户密码 memcpy(from_pos.BankCardNewPwd,in_pack->sstation1,sizeof(from_pos.BankCardNewPwd)); //银行账户新密码 memcpy(from_pos.TerminalId,in_pack->sorder2,sizeof(from_pos.TerminalId)); //终端编号 //判断交易代码,进行相应处理 //switch(241031) //int temp=atoi(from_pos.TradeCode); //printf("this is test record:atoi(from_pos.TradeCode)=[%d]\n",temp); SetCol(handle,0); SetCol(handle,F_SCLOSE_EMP,F_SORDER0,F_SORDER1,F_SSERIAL1,F_LVOL0,F_LVOL1,F_SDATE0,F_STIME0,F_SDATE1,F_STIME1,F_SCUST_NO,F_SCHANGE_EMP,F_SSERIAL0,F_LVOL2,F_SCUST_AUTH,F_SSTATUS1,F_SEMP_PWD,F_SEMP_PWD2,F_SSTATION0,F_SSTATION1,F_SORDER2,0); memcpy(tradecode,from_pos.TradeCode,sizeof(from_pos.TradeCode)); tradecode[6]=0; writelog(LOG_INFO,"Trade start,trade code=[%6.6s],card_id=[%s],bankcardno=[%s],TerminalId=[%s]!",tradecode,from_pos.CardNo,from_pos.BankCardNo,from_pos.TerminalId); switch(atoi(tradecode)) { case TRADE_INNER_QUERYBANK: ret=Pos_QueryBank(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_TRANS: ret=Pos_Transfer(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_FEE: ret=Pos_Fee(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_ADDRELATION: ret=Pos_AddRelation(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_DELRELATION: ret=Pos_DelRelation(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_POSLOGIN: ret=Pos_Login(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_QUERYINNER: ret=Pos_QuerySchool(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_CHANGEPWD: ret=Pos_ChangePwd(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_LOST: ret=Pos_LostCard(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_UNLOST: ret=Pos_UnlostCard(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } memcpy(&to_pos,&from_pos,sizeof(to_pos)); break; case TRADE_INNER_QUERYSERIAL: ret=Pos_QuerySerial(&from_pos,handle,pRetCode,szMsg); if(ret) { *pRetCode=ret; goto L_RETU; } return 0; case TRADE_INNER_WRITEERRCARD: ret=Pos_WriteErrCard(&from_pos); if(ret) { *pRetCode=ret; goto L_RETU; } break; //前台发起部分,包括签到、签退、对帐等 case TRADE_INNER_LOGIN: writelog(LOG_ERR,"start inner login!"); break; //查询补助信息 case TRADE_INNER_QUERYSUBSIDY: ret=query_subsidy(in_pack,handle,pRetCode,szMsg); if(ret) { *pRetCode=ret; goto L_RETU; } return 0; //领取补助 case TRADE_INNER_GETSUBSIDY: ret=get_subsidy(in_pack,handle,pRetCode,szMsg); if(ret) { *pRetCode=ret; goto L_RETU; } return 0; case TRADE_INNER_QUERYWATER: ret = do_query_water(in_pack,handle,pRetCode,szMsg); if(ret) { *pRetCode = ret; goto L_RETU; } return 0; case TRADE_INNER_BUYWATER: ret = do_buy_water(in_pack,handle,pRetCode,szMsg); if(ret) { *pRetCode = ret; goto L_RETU; } return 0; case TRADE_INNER_BIND_METER: ret = do_bind_water(in_pack,handle,pRetCode,szMsg); if(ret) { *pRetCode = ret; goto L_RETU; } return 0; case TRADE_INNER_UNBIND_METER: ret = do_bind_water(in_pack,handle,pRetCode,szMsg); if(ret) { *pRetCode = ret; goto L_RETU; } return 0; case TRADE_INNER_WATER_WFAIL: ret = do_write_card_error(in_pack,handle,pRetCode,szMsg); if(ret) { *pRetCode = ret; goto L_RETU; } return 0; default: writelog(LOG_INFO,"This trade can't supplied,tradecode=[%d]!",atoi(tradecode)); *pRetCode=E_TRANS_FUNC_NONSUPPORT; goto L_RETU; } Strncpy_t(out_pack->sclose_emp,to_pos.TradeCode,sizeof(out_pack->sclose_emp)); Strncpy_t(out_pack->sorder0,to_pos.TransMoney,sizeof(out_pack->sorder0)); Strncpy_t(out_pack->sorder1,to_pos.ExtraMoney,sizeof(out_pack->sorder1)); Strncpy_t(out_pack->sserial1,to_pos.AccountMoney,sizeof(out_pack->sserial1)); out_pack->lvol0=to_pos.SendNo; out_pack->lvol1=to_pos.RecvNo; Strncpy_t(out_pack->sdate0,to_pos.TradeDate,sizeof(out_pack->sdate0)); Strncpy_t(out_pack->stime0,to_pos.TradeTime,sizeof(out_pack->stime0)); Strncpy_t(out_pack->sdate1,to_pos.BankDate,sizeof(out_pack->sdate1)); Strncpy_t(out_pack->stime1,to_pos.BankTime,sizeof(out_pack->stime1)); Strncpy_t(out_pack->scust_no,to_pos.Balance,sizeof(out_pack->scust_no)); Strncpy_t(out_pack->schange_emp,to_pos.RetCode,sizeof(out_pack->schange_emp)); Strncpy_t(out_pack->sserial0,to_pos.CardNo,sizeof(out_pack->sserial0)); out_pack->lvol2=to_pos.Notecase; Strncpy_t(out_pack->scust_auth,to_pos.BankCardNo,sizeof(out_pack->scust_auth)); sprintf(out_pack->sstatus1,"%c",to_pos.MngFeeFlag); Strncpy_t(out_pack->semp_pwd,to_pos.AccountPwd,sizeof(out_pack->semp_pwd)); Strncpy_t(out_pack->semp_pwd2,to_pos.AccountNewPwd,sizeof(out_pack->semp_pwd2)); Strncpy_t(out_pack->sstation0,to_pos.BankCardPwd,sizeof(out_pack->sstation0)); Strncpy_t(out_pack->sstation1,to_pos.BankCardNewPwd,sizeof(out_pack->sstation1)); Strncpy_t(out_pack->sorder2,to_pos.TerminalId,sizeof(out_pack->sorder2)); PutRow(handle,out_pack,pRetCode,szMsg); writelog(LOG_INFO,"Trade succeed,trade code=[%6.6s]!",to_pos.TradeCode); return 0; L_RETU: //writelog(LOG_ERR,"Trade faild,trade code=[%s],return code=[%d]!",to_pos.TradeCode,*pRetCode); return *pRetCode; L_RET_BANK_NOT_LOGIN: writelog(LOG_ERR,"Trade faild,trade code=[%s],return code=[%d]!",to_pos.TradeCode,*pRetCode); *pRetCode=E_TRANS_BANK_NETERR; return *pRetCode; }
int F950052(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; //writelog(LOG_INFO,"start pos deposit"); cpu_trade_t cpu_trade; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->CheckCfgUpdate(); if(ret) return ret; T_t_authcard tAuthCard; T_t_transdtl transdtl; T_t_depositoper tDepositOper; T_t_depositoperpos tDepositOperpos; T_t_depositshoppos tDepositShoppos; T_t_shop tDepositShop; T_t_account tAccount; //帐户表 T_t_device tDevice; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tAuthCard,0,sizeof(tAuthCard)); memset(&tDepositOper,0,sizeof(tDepositOper)); memset(&tDepositOperpos,0,sizeof(tDepositOperpos)); memset(&tDepositShoppos,0,sizeof(tDepositShoppos)); memset(&tDepositShop,0,sizeof(tDepositShop)); memset(&tAccount,0,sizeof(tAccount)); memset(&transdtl,0,sizeof(transdtl)); int opercardno=rPack->lvol3; //操作员号 if(!opercardno) return E_INPUTNULL_CARDNO; trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol5; trans.purseno=PURSE_NO_ONE; trans.cardbefbal=rPack->lvol9/100.0; //入卡金额 trans.cardcnt= rPack->lvol7; //入卡金额 trans.inputamt= rPack->lvol8/100.0; //充值金额 trans.fundtype=1; transdtl.sysid= rPack->lcert_code; //上传工作站标识(前置机注册号) des2src(transdtl.devphyid, rPack->sdate1); //物理设备ID transdtl.devseqno=rPack->lvol4; //上传端流水号 ret=GetDevIdByDevPhyId(&(trans.termid),transdtl.devphyid); if (ret) { writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] devphy999_id[%s]",ret,transdtl.devphyid); return ret; } ret = DB_t_device_read_by_deviceid(trans.termid,&tDevice); if(ret) { writelog(LOG_ERR," DB_t_device_read_by_deviceid err[%d]",ret); return E_DB_DEVICE_R; } //writelog(LOG_DEBUG,"trans.inputamt[%d]",trans.inputamt); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(trans,tCard); if(ret) { return ret; } memset(&cpu_trade,0,sizeof cpu_trade); cpu_trade.random_key = atoi(rPack->sstock_code); cpu_trade.tradeamt = rPack->lvol8; cpu_trade.balance = rPack->lvol9; cpu_trade.termsno = rPack->lvol4; cpu_trade.termid = tDevice.deviceno; // 终端号 cpu_trade.tradecnt = trans.cardcnt; sprintf(cpu_trade.tx_datetime,"%s%s",rPack->spost_code,rPack->spost_code2); ret = doCheckMac(&cpu_trade,NULL,out_pack->sstock_code2); if(ret) { writelog(LOG_ERR,"doCheckMac err[%d]",ret); return ret; } trans.feetype=tCard.feetype; trans.cardtype=tCard.cardtype; ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INC,0); if(ret) return ret; // 读取操作员号 ret = DB_t_authcard_read_by_cardno(opercardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"get operator code from auth card error, auth_card_id[%d]",opercardno); if(DB_NOTFOUND == ret) return E_DB_AUTHCARD_N; else return E_DB_OPERATOR_R; } if(tAuthCard.status[0]!=STATUS_NORMAL) { return E_OPERLOGON_UNREG; } des2src(trans.opercode,tAuthCard.opercode); ret=DB_t_depositoper_read_lock_by_c0_and_opercode(trans.opercode,&tDepositOper); if(ret) { if(DB_NOTFOUND==ret) return E_DB_DEPOSITOPER_R; else return E_DB_DEPOSITOPER_N; } if(tDepositOper.status[0]!=STATUS_NORMAL) { DB_t_depositoper_free_lock_by_c0(); return E_DEPOSITOPER_STOP; } //判断是否是重复交易 if(tDepositOper.lastdevseqno==transdtl.devseqno) { DB_t_depositoper_free_lock_by_c0(); ret=DB_t_transdtl_read_by_transdate_and_devphyid_and_devseqno( trans.transdate,tDepositOper.lastdevphyid,tDepositOper.lastdevseqno, &transdtl); if(ret) { if(DB_NOTFOUND==ret) return E_DB_TRANSDTL_N; else return E_DB_TRANSDTL_R; } //if(transdtl.revflag[0]=='1') // return E_TRANSDTL_REV; ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0); out_pack->lvol5 = transdtl.cardno; out_pack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0); out_pack->lcert_code = transdtl.termseqno; writelog(LOG_INFO,"该交易已成功,卡号[%d]充值金额[%.2lf]卡余额[%.2lf]",transdtl.cardno, transdtl.amount,transdtl.cardaftbal); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } if(strncmp(tDepositOper.lasttransdate,trans.transdate,8)!=0) { des2src(tDepositOper.lasttransdate,trans.transdate); tDepositOper.depositcnt=0; tDepositOper.depositamt=0; } tDepositOper.depositcnt++; tDepositOper.depositamt+=trans.inputamt; tDepositOper.lastdevseqno=transdtl.devseqno; des2src(tDepositOper.lastdevphyid,transdtl.devphyid); getfmtsysdatetime(tDepositOper.lastsaved); if(amtcmp(tDepositOper.maxdepositamt,0)>0) { DB_t_depositoper_free_lock_by_c0(); if(amtcmp(tDepositOper.depositamt,tDepositOper.maxdepositamt)>0) { return E_OPER_OVER_MAX_DEPOSIT_AMT; } } ret=DB_t_depositoper_update_lock_by_c0(&tDepositOper); if(ret) { return E_DB_DEPOSITOPER_U; } ret=DB_t_depositshoppos_read_by_deviceid(trans.termid, &tDepositShoppos); if(ret) { if(DB_NOTFOUND==ret) { writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid); trans.transcode = TC_POSDEPOSIT; } else { return E_DB_DEPOSITSHOPPOS_R; } } else { writelog(LOG_INFO,"ShopPosDeposit termid[%d] ",trans.termid); trans.transcode = TC_SHOPPOSDEPOSIT; ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tDepositShop); if(ret) { if(DB_NOTFOUND==ret) return E_DB_SHOP_N; else return E_DB_SHOP_R; } if(tDepositShop.status[0]!=STATUS_NORMAL) { return E_SHOP_LOGOUT; } des2src(trans.draccno,tDepositShop.accno); } ret=pAccTrans->InitTrans(); if(ret) return ret; //根据卡号和钱包号得到消费者账号(借方) ret=DB_t_account_read_by_cardno_and_purseno(trans.cardno, trans.purseno,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_account_read_by_cardno_and_purseno ret[%d]cardno[%d]",ret,trans.cardno); if(DB_NOTFOUND==ret) return E_NOTEXIST_ACCNO; else return E_DB_ACCOUNT_R; } if(tAccount.lastcardcnt>trans.cardcnt) { return E_CARDCNT_LT_LASTCARDCNT; } if(amtcmp(trans.inputamt+trans.cardbefbal,tAccount.cardmaxbal)>0) return E_AMT_EXCEED_MAX; trans.custid=tCard.custid; des2src(trans.craccno,tAccount.accno); ret=pAccTrans->doTrans(); if(ret) return ret; des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.sysdate); strcpy(transdtl.acctime,trans.systime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.cardcnt=trans.cardcnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=trans.custid; des2src(transdtl.custname,tAccount.accname); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } sprintf(trans.remark,"卡号%d 充值前卡余额:%.2lf元 卡当前余额:%.2lf元",trans.cardno,trans.cardbefbal,trans.cardaftbal); writelog(LOG_INFO,trans.remark); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,F_SSTOCK_CODE2,0); out_pack->lvol5 = trans.cardno; out_pack->lvol10 = (int)D4U5(trans.cardaftbal*100,0); out_pack->lcert_code = trans.termseqno; PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F847105(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; int i=0; int origin_card_id = 0; char physical_no[40+1] = ""; char logicdate[11] = ""; //业务日期 char sysdate[11]=""; char lost_date[11]=""; char systime[9]=""; char sEndDate[9]=""; char sMsg[256]=""; T_t_pif_card tCard; T_t_pif_cardlossinfo cardlossinfo; T_t_tif_tradeserial tradeserial; T_t_tif_savdtl tSavdtl; InAcc IA; memset(&tCard,0,sizeof(tCard)); memset(&cardlossinfo,0,sizeof(cardlossinfo)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tSavdtl,0,sizeof(tSavdtl)); memset(&IA,0,sizeof(IA)); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } origin_card_id = rPack->lvol1; //原卡号 des2src(physical_no, rPack->sbank_acc); //物理卡号 if(rPack->lvol1<1) { *pRetCode=E_INPUT_CARDNO_CANNOT_NULL; goto L_RETU; } //查询支票经费本有无充值记录 ret=ChkSavdtl(origin_card_id,&tSavdtl); if(ret) { writelog(LOG_ERR,"ChkSavdtl ret[%d]",ret); *pRetCode=ret; goto L_RETU; } //Added by hhd at 2006-06-29 begin //增加判断:如果入卡值大于100,检查经费本知否充值过 //否则不加任何判断,退款到现金中 if(amtcmp(rPack->damt2,100.00)<0) { tSavdtl.bill_type=TYPE_CASH; } //Added by hhd at 2006-06-29 end tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type=TXCODE_CALLBACK_CARD; //功能号 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.sys_id = 0; //外部系统标识 des2src(tradeserial.oper_code, rPack->scust_limit); //操作员号 tradeserial.card_id=origin_card_id; ret=DB_t_pif_card_read_lock_by_cur_and_card_id(origin_card_id,&tCard); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_R; goto L_RETU; } // writelog(LOG_DEBUG,"input card_id[%d] card_id[%d]",origin_card_id,tCard.card_id); tradeserial.customer_id = tCard.cosumer_id; //客户标识 if(strncmp(tCard.state_id,CARDSTAT_REG,4)==0) { //检查物理卡号是否一致 trim(physical_no); trim(tCard.physical_no); if(strcmp(tCard.physical_no,physical_no)!=0) { DB_t_pif_card_free_lock_by_cur(); writelog(LOG_ERR,"db physical_no[%s],input physical_no[%s]",tCard.physical_no,physical_no); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } } else if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) { DB_t_pif_card_free_lock_by_cur(); *pRetCode = E_CARDNO_LOGOUT; goto L_RETU; } //changed by hhd,泰州现场修改,复旦也有这种情况,必须人为干预 //换卡写卡失败和其它写卡失败,都已库为准退卡,屏蔽掉这两判断 /* else if('3'==tCard.state_id[CARDSTAT_TYPE_REG]) { DB_t_pif_card_free_lock_by_cur(); *pRetCode=E_CARD_CHANGE; goto L_RETU; } */ else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) { DB_t_pif_card_free_lock_by_cur(); *pRetCode=E_CARDNO_FREEZE; goto L_RETU; } /* else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) { DB_t_pif_card_free_lock_by_cur(); *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } */ else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE) { if(IS_YES==rPack->lvol12) { DB_t_pif_card_free_lock_by_cur(); *pRetCode=E_CARDNO_LOST; goto L_RETU; } /* ret=DB_t_pif_cardlossinfo_read_by_card_id_and_state_id(origin_card_id, STATE_VALID, &cardlossinfo); if(ret) { DB_t_pif_card_free_lock_by_cur(); writelog(LOG_ERR,"lost_card_id[%d]",origin_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } */ ret=get_latest_lost_date_by_card_no(origin_card_id,lost_date); if(ret) { DB_t_pif_card_free_lock_by_cur(); writelog(LOG_ERR,"lost_card_id[%d]",origin_card_id); *pRetCode =ret; goto L_RETU; } //先检查客户的挂失的正式卡是否到了补办日期 ret=GetLostCardValiddate(lost_date,sEndDate); if(ret) { DB_t_pif_card_free_lock_by_cur(); *pRetCode =ret; goto L_RETU; } if(strncmp(sEndDate,sysdate,8)>0) { DB_t_pif_card_free_lock_by_cur(); writelog(LOG_ERR,"lost_normal_card_id[%d]lost_date[%s]end_date[%s]",origin_card_id,lost_date,sEndDate); *pRetCode = E_NORMALCARD_NOT_REACH_ENDDATE; goto L_RETU; } /* //更新卡挂失日期表中该卡状态为无效 ret=UpdateCardLossInfoState(origin_card_id,STATE_VALID,STATE_INVALID); if(ret) { DB_t_pif_card_free_lock_by_cur(); *pRetCode =ret; goto L_RETU; } */ //正常情况下的押金都是退的,但是如果卡丢失则不退的 // IsReturnDeposit=IS_NO; } else if(IS_YES!=rPack->lvol12) { DB_t_pif_card_free_lock_by_cur(); *pRetCode=E_NOCARD; goto L_RETU; } //注销原卡 des2src(tCard.state_id,CARDSTAT_LOGOUT); //注销 des2src(tCard.end_time,tradeserial.operate_date); //注销日期 ret=DB_t_pif_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"card_id[%d]",tCard.card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } DB_t_pif_card_free_lock_by_cur(); //是否退费,规定正式卡和临时卡退押金,非记名临时卡退押金 if(IS_YES==rPack->lvol12) { IA.iUseCardFlag=USE_CARD_TYPE_ONLINE; //联机交易 IA.dInCardBala = rPack->damt2; //入卡值 IA.dOutCardBala=-1; //-1 表示空值 IA.iTxCnt = rPack->lvol10+1; //当前卡交易次数 tradeserial.in_balance = IA.dInCardBala; //入卡值 tradeserial.trade_count = IA.iTxCnt; } else { IA.iUseCardFlag=USE_CARD_TYPE_NULL; IA.dInCardBala = -1; //-1 表示空值 IA.dOutCardBala=-1; //-1 表示空值 IA.iTxCnt = -1; //-1 表示空值 } IA.pVoidPointer=&tSavdtl.bill_type; IA.iCardNo=tCard.card_id; ret=process(rPack,&IA,&tradeserial); if(ret) { *pRetCode=ret; goto L_RETU; } writelog(LOG_DEBUG,"input card_id[%d] card_id[%d]",origin_card_id,tCard.card_id); ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode= E_DB_TRADESERIAL_E; else *pRetCode= E_DB_TRADESERIAL_I; goto L_RETU; } ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_DAMT0,F_DAMT1,F_DAMT2,F_DAMT3,F_DAMT4,F_SDATE0,F_LVOL1,F_SPHONE,F_LSERIAL1,F_VSMESS,0); sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_DEDUCT_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_RETURN_DEPOSIT: case TXTYPE_RETURN_DEPOSIT_BILL: case TXTYPE_RETURN_DEPOSIT_FUNDBOOK: tradeserial.deposit_fee=IA.dArrOutAmt[i]; out_pack->damt0+=IA.dArrOutAmt[i]; break; case TXTYPE_DEDUCT_BOARD: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: tradeserial.boardfee=IA.dArrOutAmt[i]; out_pack->damt0+=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; case TXTYPE_DRAW_CASH: case TXTYPE_DRAW_BILL: case TXTYPE_DRAW_FUNDBOOK: case TXTYPE_DRAW_OTHER: tradeserial.trade_fee=IA.dArrOutAmt[i]; out_pack->damt0+=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); if((TXTYPE_DRAW_BILL==IA.iArrOutTxType[i])|| (TXTYPE_DRAW_FUNDBOOK==IA.iArrOutTxType[i])|| (TXTYPE_DRAW_OTHER==IA.iArrOutTxType[i])) { sprintf(sMsg,"票据号码:%s ",tSavdtl.bill_no); strcat(out_pack->vsmess,sMsg); } } } sprintf(sMsg,"实际应退金额:%.2lf元",out_pack->damt0); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } out_pack->lvol1=tSavdtl.bill_type; des2src(out_pack->sdate0,tSavdtl.tx_date); out_pack->damt1=tSavdtl.amount; //经费本充值金额 out_pack->lserial1=tradeserial.serial_no; //流水号 des2src(out_pack->sphone,tSavdtl.bill_no); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847119(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char h_password[7] = ""; //卡密码 char seed_key[17] = ""; //种子密钥 T_t_pif_card tCard; T_t_tif_tradeserial tradeserial; T_t_tif_writefailed tWriteFailed; T_t_cif_customer tCustomer; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tCard,0,sizeof(tCard)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tWriteFailed, 0, sizeof tWriteFailed); memcpy(seed_key,STATIC_SEED_KEY,sizeof(seed_key)); //读种子密钥 ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5,F_LVOL6, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCUST_AUTH2, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_LSERIAL1,F_VSMESS, F_SORDER0,F_SORDER1,F_SORDER2, F_SHOLDER_AC_NO,F_SSTAT_TYPE,F_SSTAT_TYPE2, F_SNATION_CODE,F_SBRANCH_CODE0, 0); /************************************************************************/ ret = do_process(&tCard, &tWriteFailed, rPack, &tradeserial); if (ret) { *pRetCode = ret; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id); if(DB_NOTFOUND==ret) *pRetCode = E_CUSTOMER_NOT_EXIST; else *pRetCode = E_DB_CUSTOMER_R; goto L_RETU; } EncodePwd(seed_key,h_password,tCard.password,1); //卡密码 DB_t_cif_customer_free_lock_cur(); if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 补写金额:%.2lf元 补写前卡余额:%.2lf元 卡当前余额:%.2lf元",tradeserial.serial_no,tradeserial.trade_fee,tradeserial.in_balance,tradeserial.out_balance); writelog(LOG_DEBUG,out_pack->vsmess); out_pack->lvol0 = tCard.card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,tCard.showid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scust_auth2,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,h_password); //卡密码 des2src(out_pack->sdate0,tCard.end_time); //有效截至日期 strcpy(out_pack->sorder0,CARD_STRUCT_VERSION); //制卡版本号 strcpy(out_pack->sorder1,CARD_REGISTER_PUBLISH_CODE); //发卡注册标识号 strcpy(out_pack->sorder2,CARD_REGISTER_SERVICE_CODE); //服务注册标识号 sprintf(out_pack->sholder_ac_no,"%d",tCustomer.cut_id); //客户号 des2src(out_pack->sstat_type,tCustomer.man_idtype); //证件类型 des2src(out_pack->snation_code,tCustomer.country); //国籍 sprintf(out_pack->sstat_type2,"%d",tCustomer.nation); //民族 des2src(out_pack->sbranch_code0,tCustomer.school_code); //院校代码 out_pack->damt2=tradeserial.out_balance; //出卡值=入卡值+发生额 out_pack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F930002(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int mesid=0; T_t_tif_meslist tMesList; T_t_device tDevice; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_SDATE0,F_SSERIAL0,F_VSVARSTR0,0); memset(&tMesList,0,sizeof(tMesList)); memset(&tDevice,0,sizeof tDevice); if(strlen(in_pack->sdate0)==0) { if(in_pack->lcert_code <=0 ) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } tMesList.devid = in_pack->lcert_code; } else { if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMesList.devid = tDevice.deviceid; } tMesList.funid = 930002; tMesList.level = MESLIST_PRIORITY_REALTIME; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMesList.funid) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } mesid=tMesList.mesid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++) { sleep(1); memset(&tMesList,0,sizeof(tMesList)); ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList); if(ret) { writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret); *pRetCode=E_DB_MESLIST_R; goto L_RETU; } } switch(tMesList.ecode) { case 0: //成功 ret=GetXmlValue(out_pack->sserial0,sizeof(out_pack->sserial0),XML_KEY_CLOCK, tMesList.outcontent); if(ret) { *pRetCode=ret; goto L_RETU; } des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMesList.emsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F950041(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; T_t_pif_device tDevice; T_t_cif_shop_pos tShopPos; T_t_cif_shop tShop; T_t_tif_meslist tMsg; T_t_pif_feetype tFeeType; int rate = 0; int retries = 0; int msgid; unsigned char buf[32] = ""; char cardlist[100] = ""; int rows = 0; int i,j; memset(&tDevice,0,sizeof tDevice); memset(&tFeeType,0,sizeof tFeeType); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,F_VSMESS,0); if(rPack->lcert_code < 1) { *pRetCode = E_DEVICE_NOT_EXIST; } else if((ret = DB_t_pif_device_read_by_device_id(rPack->lcert_code,&tDevice))) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_DEVICE_N; else *pRetCode = E_DB_DEVICE_R; } else if(tDevice.state_id == DEVISTAT_LOGOUT) { *pRetCode = E_DEVICE_NOT_EXIST; } // 如果是 39 的充值机 else if(strcmp(tDevice.devtype,"0201") == 0 && tDevice.phytype == 1000) { des2src(rPack->sdate0,tDevice.devphy999_id); ret = F930006(handle,iRequest,rPack,pRetCode,szMsg); if(ret) { goto LRet; } return 0; } else if((ret = DB_t_cif_shop_pos_open_select_by_c0_and_device_id(rPack->lcert_code))) { *pRetCode = E_DB_SHOP_POS_R; } else { while(1) { memset(&tShopPos,0,sizeof tShopPos); memset(&tShop,0,sizeof tShop); if((ret = DB_t_cif_shop_pos_fetch_select_by_c0(&tShopPos))) { if(ret == DB_NOTFOUND) { writelog(LOG_DEBUG,"shop doesn't find [%d]!"); *pRetCode = 0; } else *pRetCode = E_DB_SHOP_POS_R; break; } writelog(LOG_DEBUG,"find shop [%d]",tShopPos.shop_id); if((ret = DB_t_cif_shop_read_by_shop_id(tShopPos.shop_id,&tShop))) { *pRetCode = ret; break; } if('1' == tShop.is_leaf[0] && '1' == tShop.is_getfee[0] && amtcmp(tShop.ratio,0.00)>0 ) { writelog(LOG_DEBUG,"shop rate [%.02f]",tShop.ratio); int newrate = D2I(tShop.ratio * 100); if(newrate > rate) rate = newrate; } } } if(*pRetCode) return -1; ret = DB_t_pif_feetype_open_select_by_cur1(); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_FEETYPE_N; else *pRetCode = E_DB_FEETYPE_R; return -1; } memset(buf,0,sizeof buf); while(1) { memset(&tFeeType,0,sizeof &tFeeType); ret = DB_t_pif_feetype_fetch_select_by_cur1(&tFeeType); if(ret) { if(DB_NOTFOUND == ret) { if(rows > 0) break; *pRetCode = E_DB_FEETYPE_N; } else *pRetCode = E_DB_FEETYPE_R; } rows++; if(tFeeType.fee_type < 0 || tFeeType.fee_type > 255 || tFeeType.is_outfee[0] != '1' ) continue; writelog(LOG_DEBUG,"fee[%s][%d][%c]",tFeeType.fee_name,tFeeType.fee_type ,tFeeType.is_outfee[0]); _SET_BIT(buf,tFeeType.fee_type-1); } //writelog(LOG_DEBUG,"bit length %d",BIT_LENGTH); memset(&tMsg,0,sizeof tMsg); tMsg.funid = 950041; tMsg.level = 1; tMsg.devid = tDevice.device_id; for(i = 0,j = 0;i < sizeof buf;++i) { j += sprintf(cardlist+j,"%02x",buf[i]); } AddXmlItemInt(tMsg.incontent,XML_KEY_FEE,rate); AddXmlItemStr(tMsg.incontent,XML_KEY_CARDRIGHTTYPE,cardlist); tMsg.max_send_cnt = 5; if((ret = AddMsgLst(&tMsg))) { *pRetCode = ret; } else { if(db_commit()) { *pRetCode = E_DB_COMMIT; return -1; } retries = 10; msgid = tMsg.mesid; for(retries=0;(retries<10)&&(tMsg.ecode!=0);retries++) { memset(&tMsg,0,sizeof tMsg); ret = DB_t_tif_meslist_read_by_mesid(msgid,&tMsg); if(ret) { strcpy(out_pack->vsvarstr0,"读取指令失败"); *pRetCode=E_DB_MESLIST_R; strcpy(szMsg,"读取指令失败"); return -1; } // 等待1秒 sleep(1); } switch(tMsg.ecode) { case 0: //成功 des2src(out_pack->vsmess,"成功"); strcpy(szMsg,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsmess,"前置机无应答"); strcpy(szMsg,"前置机无应答"); goto LRet; default: //交易已经处理,但结果是失败 des2src(out_pack->vsmess,tMsg.emsg); goto LRet; } PutRow(handle,out_pack,pRetCode,szMsg); AnswerData(handle,*pRetCode,szMsg); return 0; } LRet: return -1; }
int F240010(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { char key[32+1]=""; char pwd[32+1]=""; char account_pwd[6+1]=""; int ret=0; T_t_card card; int custid=0; char stuempno[20+1]=""; int cardno=0; T_t_card tCard1; memset(&card,0,sizeof(card)); custid=rPack->lvol8; des2src(stuempno,rPack->scust_auth); cardno=atoi(rPack->sserial0); //writelog(LOG_ERR," stuempno=[%s],custid=[%d],cardno=[%s]",rPack->scust_auth,rPack->lvol8,rPack->sserial0); if(cardno<1) { if(custid<1)//学号,无卡使用 { //挂失时使用,其他不使用 if(strlen(stuempno)<1) { return E_TRANS_SCHACC_NOEXIT; } ret=get_custid_by_stuempno(stuempno,&custid); if(ret) { return ret; } } //客户号 memset(&tCard1,0,sizeof(tCard1)); ret=get_cardno_by_custid(custid, &cardno); if(ret) { return ret; } } ret=DB_t_card_read_by_cardno(cardno,&card); if(ret) { writelog(LOG_ERR,"DB_t_card_read_by_cardno error,errcode=[%d],cardno=[%d]",ret,cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,cardno); else return E_DB_CARD_R; } if(card.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARD_LOGOUT,card.cardno); } strcpy(key,STATIC_SEED_KEY); des2src(account_pwd, rPack->semp_pwd); EncodePwd(key,account_pwd,pwd, 0); //判断卡密码是否正确 if(0!=strncmp(pwd,card.cardpwd,sizeof(pwd))) { writelog(LOG_ERR,"Card password error,clear_pwd[%s],input_pwd=[%s],db_pwd=[%s]",account_pwd,pwd,card.cardpwd); return E_TRANS_SCHCARD_PWDERR; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,F_LVOL0,0); outPack->lvol0=card.cardno; PutRow(handle,outPack,pRetCode,szMsg); return 0;
int F930064(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int mesid=0; char dev999_no[20]=""; T_t_tif_meslist tMesList; T_t_pif_device tDevice; memset(&tDevice,0,sizeof tDevice); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SDATE0,F_SDATE2,F_SDATE3,F_LVOL3,F_VSVARSTR0,0); memset(&tMesList,0,sizeof(tMesList)); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemInt(tMesList.incontent, XML_KEY_MAXTRADE, in_pack->lvol4); if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMesList.devid = tDevice.device_id; tMesList.funid = 930064; tMesList.level = 2; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMesList.funid) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } mesid=tMesList.mesid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++) { sleep(1); memset(&tMesList,0,sizeof(tMesList)); ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList); if(ret) { writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret); *pRetCode=E_DB_MESLIST_R; goto L_RETU; } } switch(tMesList.ecode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); ret=GetXmlValue(out_pack->sdate0,sizeof(out_pack->sdate0),XML_KEY_DEVPHY999_NO, tMesList.outcontent); if(ret) { *pRetCode=ret; goto L_RETU; } ret=GetXmlValue(dev999_no,sizeof(dev999_no),XML_KEY_DEV999_NO, tMesList.outcontent); if(ret) { *pRetCode=ret; goto L_RETU; } out_pack->lvol3=atoi(dev999_no); ret=GetXmlValue(out_pack->sdate2,sizeof(out_pack->sdate2),XML_KEY_DEV999_ID, tMesList.outcontent); if(ret) { *pRetCode=ret; goto L_RETU; } ret=GetXmlValue(out_pack->semp,sizeof(out_pack->semp),XML_KEY_DEVTYPE, tMesList.outcontent); if(ret) { *pRetCode=ret; goto L_RETU; } ret=GetXmlValue(out_pack->sdate3,sizeof(out_pack->sdate3),XML_KEY_DEVVERSION, tMesList.outcontent); if(ret) { *pRetCode=ret; goto L_RETU; } break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMesList.emsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F841607(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int i=0; int iCnt=0; int flag=0; T_t_cif_phototmp tPhotoTmp; T_t_cif_phototmp tPhotoTmpOut; T_t_cif_photo tYktPhoto; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tPhotoTmp,0,sizeof(T_t_cif_phototmp)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SCUST_LIMIT,F_VSMESS,0); tPhotoTmp.seqno=rPack->lvol4; if(1==tPhotoTmp.seqno) { flag=1; //取批次号 getsysdatetime(tPhotoTmp.batch_no); ret=DynamicStmtExecute("delete from ykt_cur.t_cif_phototmp"); if(ret) { if(DB_NOTFOUND != ret) { *pRetCode=E_DYNAMIC_STMT_EXECUTE; goto L_RETU; } } } else { des2src(tPhotoTmp.batch_no,rPack->scust_limit); if(strlen(tPhotoTmp.batch_no)!=14) { *pRetCode=E_INPUT_BATCH_NO; goto L_RETU; } } des2src(tPhotoTmp.stuemp_no,rPack->scust_auth); des2src(tPhotoTmp.stuemp_name,rPack->sname); des2src(tPhotoTmp.cut_type,rPack->sname2); des2src(tPhotoTmp.sex,rPack->smarket_code); des2src(tPhotoTmp.dept_code,rPack->scust_no); des2src(tPhotoTmp.s_code,rPack->scust_no2); des2src(tPhotoTmp.cur_grade,rPack->sorder0); // des2src(tCustomerTmp.status,rPack->scust_type); tPhotoTmp.is_inschool=rPack->lvol1; tPhotoTmp.status=rPack->lvol2; ret=DB_t_cif_phototmp_add(&tPhotoTmp); if(SQLCODE) { if(DB_REPEAT==SQLCODE) { if(1==tPhotoTmp.seqno) { //如果插入有冲突,则再重新生成新的批次号 for(i=0;i<3;i++) { sleep(1); getsysdatetime(tPhotoTmp.batch_no); ret=DB_t_cif_phototmp_add(&tPhotoTmp); if(ret) { if(DB_REPEAT==SQLCODE) continue; else { *pRetCode=E_DB_PHOTOTMP_I; goto L_RETU; } } break; } if(i>=3) { writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tPhotoTmp.batch_no,tPhotoTmp.seqno); *pRetCode=E_DB_PHOTOTMP_E; goto L_RETU; } } else { writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tPhotoTmp.batch_no,tPhotoTmp.seqno); *pRetCode=E_DB_PHOTOTMP_E; goto L_RETU; } } else { writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tPhotoTmp.batch_no,tPhotoTmp.seqno); *pRetCode=E_DB_PHOTOTMP_I; goto L_RETU; } } if(rPack->scust_type[0]=='1') { //最后一条,开始把临时表数据导入到照片表 writelog(LOG_DEBUG,"导入第%d记录,批次号:%s,姓名:%s",tPhotoTmp.seqno,tPhotoTmp.batch_no,tPhotoTmp.stuemp_name); //因为照片库是联邦过来的,需要先提交事务,才能更新联邦数据库 ret=db_commit(); if(ret) { ret=E_DB_COMMIT; writelog(LOG_ERR,"db_commit ret[%d]",ret); goto L_RETU; } iCnt=0; ret=DB_t_cif_phototmp_open_select_by_c0_and_batch_no(tPhotoTmp.batch_no); while(1) { memset(&tPhotoTmpOut,0,sizeof(tPhotoTmpOut)); ret=DB_t_cif_phototmp_fetch_select_by_c0(&tPhotoTmpOut); if(ret) { if(DB_NOTFOUND==ret) { if(iCnt>0) break; else { *pRetCode=E_DB_PHOTOTMP_N; goto L_RETU; } } else { *pRetCode=E_DB_PHOTOTMP_R; goto L_RETU; } } memset(&tYktPhoto,0,sizeof(tYktPhoto)); //导入照片表 des2src(tYktPhoto.cur_grade,tPhotoTmpOut.cur_grade); des2src(tYktPhoto.cut_type,tPhotoTmpOut.cut_type); des2src(tYktPhoto.dept_code,tPhotoTmpOut.dept_code); tYktPhoto.is_inschool=tPhotoTmpOut.is_inschool; des2src(tYktPhoto.sex,tPhotoTmpOut.sex); des2src(tYktPhoto.stuemp_name,tPhotoTmpOut.stuemp_name); des2src(tYktPhoto.stuemp_no,tPhotoTmpOut.stuemp_no); des2src(tYktPhoto.s_code,tPhotoTmpOut.s_code); ret=DB_t_cif_photo_add(&tYktPhoto); if(ret) { DB_t_cif_phototmp_close_select_by_c0(); sprintf(szMsg,"批次号%s,第%d条姓名为%s的记录有误,不能导入.",tPhotoTmpOut.batch_no,tPhotoTmpOut.seqno,tPhotoTmp.stuemp_name); goto L_RETU; } ++iCnt; } sprintf(out_pack->vsmess,"批次号:%s,共成功导入%d条客户信息",tPhotoTmp.batch_no,iCnt); flag=2; } if(flag!=2) { sprintf(out_pack->vsmess,"导入第%d记录,批次号:%s,姓名:%s",tPhotoTmp.seqno,tPhotoTmp.batch_no,tPhotoTmp.stuemp_name); } des2src(out_pack->scust_limit,tPhotoTmp.batch_no); PutRow(handle,out_pack,pRetCode,szMsg); writelog(LOG_DEBUG,out_pack->vsmess); return 0; L_RETU: return -1; }
int F847183(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char tx_date[8+1]=""; //发生日期 // char tx_time[6+1]=""; //发生时间 int card_no=0; //卡号 char device_id[8+1]=""; //终端机ID int serial_no=0; //终端机流水号 int flag=0; double dUniqno=0; T_t_tif_tradeserial tOldTradeserial; //当日流水表 T_t_tif_tradeserial tTradeserial; //当日流水表 T_t_tif_tradeserial_his tTradeserialhis; //历史流水表 T_t_pif_card tCard; char sysdate[11]=""; char systime[9]=""; char sYear[5]=""; char sMonDay[5]=""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); memset(&tTradeserial,0,sizeof(tTradeserial)); memset(&tOldTradeserial,0,sizeof(tOldTradeserial)); memset(&tTradeserialhis,0,sizeof(tTradeserialhis)); memset(&tCard,0,sizeof tCard); getsysdate(sysdate); getsystime(systime); des2src(tTradeserial.enteract_time,systime); des2src(tx_date,rPack->sbank_pwd); // des2src(tx_time,rPack->sbank_code); card_no=rPack->lvol0; des2src(device_id,rPack->sbank_pwd2); serial_no=rPack->lvol1; trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); des2src(sYear,tx_date); des2src(sMonDay,tx_date+4); if(strlen(rPack->scust_limit)==0) { *pRetCode=E_OPER_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scust_limit2)==0) { *pRetCode=E_INPUT_AUTH_OPER_NULL; goto L_RETU; } if(strcmp(rPack->scust_limit,rPack->scust_limit2)==0) { writelog(LOG_ERR,"oper[%s]auth_oper[%s]",rPack->scust_limit,rPack->scust_limit2); *pRetCode=E_OPER_AND_AUTH_OPER_EQ; goto L_RETU; } ret=chk_oper_pwd(rPack->scust_limit2,rPack->semp_pwd); if(ret) { if(E_OPER_NOT_EXIST==ret) *pRetCode=E_AUTH_OPER_NOT_EXIST; else if(E_PASSWORD_WRONG==ret) *pRetCode=E_AUTH_OPER_PWD; else *pRetCode=ret; goto L_RETU; } ret = DB_t_pif_card_read_by_card_id(card_no,&tCard); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } if(tCard.state_id[CARDSTAT_TYPE_REG] == '2') { writelog(LOG_ERR,"冲正交易卡号已注销cardid[%d]",tCard.card_id); *pRetCode = E_ACTNO_LOGOUT; goto L_RETU; } //查询当前流水表 ret=DB_t_tif_tradeserial_read_lock_by_c4_and_operate_date_and_serial_no_and_card_id(tx_date,serial_no,card_no,&tOldTradeserial); if(ret) { writelog(LOG_ERR,"tx_date[%s]serial_no[%d]ret[%d]",tx_date,serial_no,ret); if(DB_NOTFOUND!=ret) { *pRetCode=E_DB_TRADESERIAL_R; goto L_RETU; } } else { flag=1; memcpy(&tTradeserial,&tOldTradeserial,sizeof(tTradeserial)); tTradeserial.other_seri_no=tOldTradeserial.serial_no; //上传端流水号 tOldTradeserial.serial_state=SERISTAT_RUSH; //冲正 des2src(tOldTradeserial.oper_code,rPack->scust_limit); ret=DB_t_tif_tradeserial_update_lock_by_c4(&tOldTradeserial); if(ret) { *pRetCode=E_DB_TRADESERIAL_U; writelog(LOG_ERR,"DB_t_tif_tradeserial_update_lock_by_c4[%d]",ret); goto L_RETU; } DB_t_tif_tradeserial_free_lock_c4(); } if(!flag) { //查询历史流水表 ret=DB_t_tif_tradeserial_his_read_lock_by_c0_and_trans_year_and_trans_mon_day_and_serial_no_and_card_id(sYear,sMonDay,serial_no,card_no,&tTradeserialhis); if(ret) { writelog(LOG_ERR,"year[%s]date[%d]serialno[%d]ret[%d]",sYear,sMonDay,serial_no,ret); if(DB_NOTFOUND==ret) { *pRetCode=E_SERIALNO_NOT_EXIST; goto L_RETU; } else { *pRetCode=E_DB_TRADESERIAL_R; goto L_RETU; } } tTradeserial.other_seri_no=tTradeserialhis.serial_no; //上传端流水号 tTradeserial.serial_state = tTradeserialhis.serial_state; //流水状态 tTradeserial.tmark=tTradeserialhis.tmark; //999交易标记 tTradeserial.maindevice_id = tTradeserialhis.maindevice_id; //上传工作站标识(前置机注册号) tTradeserial.sys_id= tTradeserialhis.sys_id; tTradeserial.comu_ver=tTradeserialhis.comu_ver; //通信版本号 // add by 汤成 2007-10-31 tTradeserial.device_id=tTradeserialhis.device_id; des2src(tTradeserial.devphy999_id,tTradeserialhis.devphy999_id); //物理设备ID des2src(tTradeserial.dev_auth,tTradeserialhis.dev_auth); //终端设备授权号 des2src(tTradeserial.crc,tTradeserialhis.crc); //CRC校验 tTradeserial.card_id = tTradeserialhis.card_id; //交易卡号 tTradeserial.purse_id = tTradeserialhis.purse_id; //消费钱包号 tTradeserial.in_balance =tTradeserialhis.in_balance; //入卡金额 tTradeserial.out_balance = tTradeserialhis.out_balance; //出卡金额 tTradeserial.trade_fee = tTradeserialhis.trade_fee; //本次消费金额 tTradeserial.trade_count = tTradeserialhis.trade_count; //当前卡中帐户消费次数(累计使用次数) tTradeserial.serial_type = tTradeserialhis.serial_type; //交易代码 tTradeserial.boardfee = tTradeserialhis.boardfee ; //搭伙费 des2src(tTradeserial.operate_date,tTradeserialhis.operate_date); //发生日期(格式化输入的日期) des2src(tTradeserial.operate_time,tTradeserialhis.operate_time); //发生时间(格式化输入的时间) tTradeserial.condition_id = tTradeserialhis.condition_id; // 收费科目 tTradeserialhis.serial_state=SERISTAT_RUSH; //冲正 des2src(tTradeserialhis.oper_code,rPack->scust_limit); ret=DB_t_tif_tradeserial_his_update_lock_by_c0(&tTradeserialhis); if(ret) { *pRetCode=E_DB_TRADESERIAL_U; writelog(LOG_ERR,"DB_t_tif_tradeserial_update_lock_by_c4[%d]",ret); goto L_RETU; } DB_t_tif_tradeserial_his_free_lock_by_c0(); } if(tTradeserial.card_id!=card_no) { writelog(LOG_ERR,"流水中卡号不符cardid[%d]serial[%d]",card_no,tTradeserial.card_id); *pRetCode=E_SERIALNO_NOT_EXIST; goto L_RETU; } if(tTradeserial.serial_state==SERISTAT_RUSH) { *pRetCode=E_TX_SERIAL_CZ; goto L_RETU; } if(tTradeserial.serial_state!=SERISTAT_DEBT) { *pRetCode=E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } if(amtcmp(tTradeserial.trade_fee,0)==0) { *pRetCode=E_TX_SERIAL_CANNOT_CZ; goto L_RETU; } des2src(tTradeserial.operate_date,sysdate); des2src(tTradeserial.operate_time,systime); des2src(tTradeserial.collect_date,sysdate); des2src(tTradeserial.collect_time,systime); ret=GetLogicDate(tTradeserial.enteract_date); //业务日期 if(ret) { *pRetCode=ret; writelog(LOG_ERR,"GetLogicDate err ret[%d]",ret); goto L_RETU; } des2src(tTradeserial.enteract_time,systime); tTradeserial.in_balance =rPack->damt1; tTradeserial.trade_fee = -1 * tTradeserial.trade_fee; //本次消费金额 tTradeserial.boardfee = -1 * tTradeserial.boardfee; //本次消费管理费 tTradeserial.out_balance=tTradeserial.in_balance-tTradeserial.trade_fee; if(rPack->lvol10 > 0) tTradeserial.trade_count=rPack->lvol10+1; tTradeserial.maindevice_id=rPack->lvol6; des2src(tTradeserial.oper_code,rPack->scust_limit); tTradeserial.reviseserial_no=tTradeserial.other_seri_no; //取流水号,从帐处理 ret=getNewUniqNo(KEYTYPE_TRADESERIAL, &dUniqno); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"getNewUniqNo err[%d]",ret); goto L_RETU; } tTradeserial.serial_no=D2I(dUniqno); //###################################################### //入账处理 switch(tTradeserial.serial_type) { case 930031: // 交易冲正 if(amtcmp(tTradeserial.trade_fee,0)==0) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930031(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; case 930034: // 充值冲正 if(amtcmp(tTradeserial.trade_fee,0)==0) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930034(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; case 930036: // 搭伙费冲正 if(amtcmp(tTradeserial.trade_fee,0)==0) break; tTradeserial.serial_type=TXCODE_TX_REVEAL; ret=process930036(&tTradeserial); if(ret) { //业务处理失败处理 *pRetCode=ret; goto L_RETU; } break; default: *pRetCode=E_TXCODE_NOT_EXIST; //交易码错误 goto L_RETU; } //###################################################### //添加交易流水 tTradeserial.serial_state=SERISTAT_DEBT; ret = DB_t_tif_tradeserial_add(&tTradeserial); if (ret) { writelog(LOG_ERR,"DB_t_tif_tradeserial_add ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode= E_DB_TRADESERIAL_E; else *pRetCode= E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tTradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_DAMT3,F_VSMESS,0); out_pack->lserial1=tTradeserial.serial_no; out_pack->damt2=tTradeserial.out_balance; out_pack->damt3=-tTradeserial.trade_fee; sprintf(out_pack->vsmess,"流水号:%d 冲正金额:%.2lf元 冲正前卡余额:%.2lf元 卡当前余额:%.2lf元",tTradeserial.serial_no,-tTradeserial.trade_fee,tTradeserial.in_balance,tTradeserial.out_balance); writelog(LOG_DEBUG,out_pack->vsmess); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F930002(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int msgid=0; T_t_msglist tMsgList; // T_t_device tDevice; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_SDATE0,F_SSERIAL0,F_VSVARSTR0,0); memset(&tMsgList,0,sizeof(tMsgList)); // memset(&tDevice,0,sizeof tDevice); tMsgList.deviceid = in_pack->lcert_code; if(!tMsgList.deviceid) { return E_INPUTNULL_DEVICE; } tMsgList.funcno = 930002; tMsgList.msglevel = MESLIST_PRIORITY_REALTIME; ret=AddMsgLst(&tMsgList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMsgList.funcno) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } msgid=tMsgList.msgid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<20)&&(tMsgList.errcode!=0);cnt++) { sleep(1); memset(&tMsgList,0,sizeof(tMsgList)); ret=DB_t_msglist_read_by_msgid(msgid, &tMsgList); if(ret) { writelog(LOG_ERR,"DB_t_msglist_read_by_msgid err[%d]",ret); *pRetCode=E_DB_MSGLIST_R; goto L_RETU; } } switch(tMsgList.errcode) { case 0: //成功 ret=GetXmlValue(out_pack->sserial0,sizeof(out_pack->sserial0),XML_KEY_CLOCK, tMsgList.respdata); if(ret) { *pRetCode=ret; goto L_RETU; } des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMsgList.errmsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847107(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int i=0; int ret =0; char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; int cardno=0; char sMsg[256]=""; char cardphyid[17]=""; T_t_tif_tradeserial tradeserial; T_t_card tCard; T_t_tif_savdtl tSavdtl; T_t_customer tCustomer; T_t_spefee tSpeFee; T_t_aif_account tAccount; //帐户表 InAcc IA; double dSerialNo = 0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); *pRetCode=0; memset(&tCard,0,sizeof(tCard)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&IA,0,sizeof(IA)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LSERIAL1,F_DAMT2,F_VSMESS,0); cardno=rPack->lvol0; des2src(cardphyid, rPack->sbank_acc); //物理卡号 if(amtcmp(rPack->damt0,0)<=0) { *pRetCode=E_INPUT_AMT; goto L_RETU; } if(amtcmp(rPack->damt1,0)<0) { *pRetCode=E_INPUT_CARD_BALA; goto L_RETU; } if(rPack->lvol10<1) { *pRetCode=E_INPUT_CARD_TXCNT; goto L_RETU; } if(amtcmp(rPack->damt1,rPack->damt0)<0) { writelog(LOG_ERR,"tCard balance[%lf] amount[%lf]",rPack->damt1,rPack->damt0); *pRetCode= E_BALANCE_SHORTAGE; goto L_RETU; } getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } ret=DB_t_card_read_by_cardno(cardno, &tCard); if(ret) { if(DB_NOTFOUND==ret) *pRetCode=E_CARDNO_NOT_EXIST; else *pRetCode=E_DB_CARD_R; goto L_RETU; } if(strncmp(tCard.cardattr,CARDSTAT_REG,4)!=0) { if('2'==tCard.cardattr[CARDSTAT_TYPE_REG]) *pRetCode = E_CARD_CLOSE; else if('3'==tCard.cardattr[CARDSTAT_TYPE_REG]) *pRetCode = E_CARD_CHANGE; else if(tCard.cardattr[CARDSTAT_TYPE_LOST]==STATE_TRUE) *pRetCode=E_CARD_LOST; else if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) *pRetCode=E_CARD_FREEZE; else if(tCard.cardattr[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) *pRetCode=E_CARDNO_WFAIL; goto L_RETU; } trim(cardphyid); trim(tCard.cardphyid); if(strcmp(tCard.cardphyid,cardphyid)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,cardphyid); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } tradeserial.trade_fee = rPack->damt0; //支取金额 ret=DB_t_aif_account_read_by_cardno_and_purseno(cardno,PURSE_NO_ONE,&tAccount); if(ret) { writelog(LOG_ERR,"DB_t_aif_account_read_by_cardno_and_purseno ret[%d]cardno[%d]purseno[%d]",ret,cardno); if(DB_NOTFOUND==ret) *pRetCode= E_ACTNO_NOT_EXIST; else *pRetCode= E_DB_ACCOUNT_R; goto L_RETU; } if(amtcmp(tradeserial.trade_fee,tAccount.cur_freebala)>0) { writelog(LOG_ERR,"tradeserial.trade_fee[%lf]tAccount.cur_freebala[%lf]",tradeserial.trade_fee,tAccount.cur_freebala); *pRetCode= E_BALANCE_SHORTAGE; goto L_RETU; } //查询支票经费本有无充值记录 ret=ChkSavdtl(cardno,&tSavdtl); if(ret) { writelog(LOG_ERR,"ChkSavdtl ret[%d]",ret); *pRetCode=ret; goto L_RETU; } IA.dArrInAmt[0]=tradeserial.trade_fee; switch(tSavdtl.billtype) { case TYPE_CASH: //现金 IA.iArrInFeeSwitch[1]=1; break; case TYPE_BILL: //支票 IA.iArrInFeeSwitch[2]=1; break; case TYPE_FUNDBOOK: //经费本 IA.iArrInFeeSwitch[3]=1; break; default: writelog(LOG_ERR,"type[%d]",tSavdtl.billtype); IA.iArrInFeeSwitch[1]=1; break; } ret=DB_t_customer_read_lock_by_cur_and_custid(tCard.custid, &tCustomer); if(ret) { writelog(LOG_ERR,"custid[%d]",tCard.custid); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.feetype<1) { ret=DB_t_spefee_read_by_deptcode_and_custtype(tCustomer.deptcode, tCustomer.custtype,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.feetype=tCustomer.custtype; } else { DB_t_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.feetype=tSpeFee.feetype; } //更新客户表的收费类别字段 ret=DB_t_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } } DB_t_customer_free_lock_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR," ERRCODE = [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(dSerialNo); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_DRAW_DEPOSIT_LOG; //交易代码 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindeviceid = rPack->lvol6; //上传工作站标 tradeserial.deviceid = rPack->lvol7; //采集设备标识 tradeserial.cardno = rPack->lvol0; //卡号 tradeserial.purseno = rPack->lvol1; //钱包号 tradeserial.custid = rPack->lvol2; //客户标识 tradeserial.in_balance=rPack->damt1; //入卡值 tradeserial.trade_count=rPack->lvol10+1; //交易次数 des2src(tradeserial.opercode , rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 IA.iCardNo=tCard.cardno; IA.iFeeType=tCustomer.feetype; strcpy(IA.sArrInActno[0],tAccount.account_id); IA.dArrInAmt[0]=tradeserial.trade_fee; //账号 IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; T_t_cardbitmap tCardBitmap; memset(&tCardBitmap,0,sizeof(tCardBitmap)); ret=DB_t_cardbitmap_read_lock_by_cur_and_cardno(cardno,&tCardBitmap); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_DB_CARD_N; else *pRetCode= E_DB_CARD_R; goto L_RETU; } if(tradeserial.trade_count-tCardBitmap.base_no%2000>2000) { memcpy(tCardBitmap.bitmap,tCardBitmap.bitmap+1000,1000); memset(tCardBitmap.bitmap+1000,'0',1000); tCardBitmap.base_no+=1000; } tCardBitmap.bitmap[tradeserial.trade_count-tCardBitmap.base_no-1]='1'; ret=DB_t_cardbitmap_update_lock_by_cur(&tCardBitmap); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_DB_CARD_N; else *pRetCode= E_DB_CARD_U; goto L_RETU; } DB_t_cardbitmap_free_lock_cur(); // 调用入账子模块 ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.depositfee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_BILL: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: tradeserial.managefee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,"支取前卡余额:%.2lf元 卡当前余额:%.2lf元",tradeserial.in_balance,tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); // 插入卡操作流水表 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }