/* * GH * Called from cmd4.c and a few other places. Just extracts * a direction from the keymap for ch (the last direction, * in fact) byte or char here? I'm thinking that keymaps should * generally only apply to single keys, which makes it no more * than 128, so a char should suffice... but keymap_act is 256... */ int get_keymap_dir(char ch) { cptr act, s; int d = 0; if (isdigit(ch)) { d = D2I(ch); } else { if (rogue_like_commands) { act = keymap_act[KEYMAP_MODE_ROGUE][(byte)ch]; } else { act = keymap_act[KEYMAP_MODE_ORIG][(byte)ch]; } if (act) { /* Convert to a direction */ for (s = act; *s; ++s) { /* Use any digits in keymap */ if (isdigit(*s)) d = D2I(*s); } } } return d; }
/* * Extract a direction (or zero) from a character */ int target_dir(struct keypress ch) { int d = 0; /* Already a direction? */ if (isdigit((unsigned char) ch.code)) { d = D2I(ch.code); } else if (isarrow(ch.code)) { switch (ch.code) { case ARROW_DOWN: d = 2; break; case ARROW_LEFT: d = 4; break; case ARROW_RIGHT: d = 6; break; case ARROW_UP: d = 8; break; } } else { int mode; const struct keypress *act; if (OPT(rogue_like_commands)) mode = KEYMAP_MODE_ROGUE; else mode = KEYMAP_MODE_ORIG; /* XXX see if this key has a digit in the keymap we can use */ act = keymap_find(mode, ch); if (act) { const struct keypress *cur; for (cur = act; cur->type == EVT_KBRD; cur++) { if (isdigit((unsigned char) cur->code)) d = D2I(cur->code); } } } /* Paranoia */ if (d == 5) d = 0; /* Return direction */ return (d); }
int F820121(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { T_t_pif_phydevice aphydev; double dUniqNo=0; int ret=0; memset(&aphydev,0,sizeof(aphydev)); //从cpack中取得相应字符串 Strncpy_t(aphydev.dname,in_pack->sphone,sizeof(aphydev.dname)); Strncpy_t(aphydev.dtype,in_pack->spager,sizeof(aphydev.dtype)); Strncpy_t(aphydev.factory,in_pack->scert_no,sizeof(aphydev.factory)); Strncpy_t(aphydev.comments,(char*)in_pack->usset1,sizeof(aphydev.comments)); //设备标志从系统键值表中取得 ret=getNewUniqNo(KEYTYPE_PHYDEVICE,&dUniqNo); if(ret) { *pRetCode=E_DB_SYSKEY_R; goto L_RETU; } aphydev.phytype =D2I(dUniqNo); ret=DB_t_pif_phydevice_add(&aphydev); if(ret) { *pRetCode=E_DB_PHYDEVICE_I; goto L_RETU; } return 0; L_RETU: return -1; }
void CDialogParamRegion::SetKeBe(DATA_IN::EnergyType energyType) { m_KE_BE = energyType; m_ComboAnodeControl.EnableWindow(m_KE_BE == DATA_IN::EnergyType::BE); m_AnodeTxtControl.EnableWindow(m_KE_BE == DATA_IN::EnergyType::BE); int NewValue = D2I( ((int) 10* CRegion::h_nu_Info.Value_h_nu[m_Anode])/10.) - D2I(m_KE_Start); m_KE_Start = I2D(NewValue); NewValue = D2I( ((int) 10* CRegion::h_nu_Info.Value_h_nu[m_Anode])/10.) - D2I(m_KE_End); m_KE_End = I2D(NewValue); std::swap(m_KE_Start, m_KE_End); UpdateData(FALSE); }
static int record_small_serial(ST_PACK *in_pack,T_t_tif_tradeserial *tradeserial,ST_PACK *out_pack){ int ret =0; double dUniqno = 0; T_t_tif_tradeserial tPacketSerial; //保存充值流水 memset(&tPacketSerial, 0, sizeof tPacketSerial); memcpy(&tPacketSerial, tradeserial, sizeof tPacketSerial); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno); //获得最大流水号 if(ret) { writelog(LOG_ERR,"ret [%d]",ret); return ret; } tPacketSerial.serial_no = D2I(dUniqno); tPacketSerial.serial_state = SERISTAT_NONEEDDEBT; tPacketSerial.serial_type = TXCODE_SAVING_SMALL_PACKET; tPacketSerial.purse_id = 33;//33扇区钱包 tPacketSerial.in_balance = in_pack->damt2; tPacketSerial.trade_fee = in_pack->damt1; tPacketSerial.out_balance = tPacketSerial.in_balance + tPacketSerial.trade_fee; ret = DB_t_tif_tradeserial_add(&tPacketSerial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) ret = E_DB_TRADESERIAL_E; else ret = E_DB_TRADESERIAL_I; return ret; } out_pack->damt2=tPacketSerial.out_balance; out_pack->lvol1= D2I(dUniqno); //流水号 return 0; }
/** * Get a command count, with the '0' key. */ static int textui_get_count(void) { int count = 0; while (1) { ui_event_data ke; prt(format("Count: %d", count), 0, 0); ke = inkey_ex(); if (ke.type != EVT_KBRD) continue; if (ke.key == ESCAPE) return -1; /* Simple editing (delete or backspace) */ else if (ke.key == 0x7F || ke.key == KTRL('H')) count = count / 10; /* Actual numeric data */ else if (isdigit((unsigned char) ke.key)) { count = count * 10 + D2I(ke.key); if (count >= 9999) { bell("Invalid repeat count!"); count = 9999; } } /* Anything non-numeric passes straight to command input */ else { /* XXX nasty hardcoding of action menu key */ if (ke.key != '\n' && ke.key != '\r') Term_event_push(&ke); break; } } return count; }
int F820131(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { T_t_cardstrut acardstru; double dUniqNo=0; int scode=0; memset(&acardstru,0,sizeof(acardstru)); //从cpack中取得相应字符串 acardstru. phytype = in_pack->lvol4; acardstru. sectorno = in_pack->lvol5; acardstru. blockno = in_pack->lvol6; acardstru. begin_addr = in_pack->lvol7; acardstru. end_addr = in_pack->lvol8; acardstru. bytenum = in_pack->lvol9; Strncpy_t(acardstru.define,(char*)in_pack->usset0,sizeof(acardstru.define)); Strncpy_t(acardstru.comments,(char*)in_pack->usset1,sizeof(acardstru.comments)); //设备标志从系统键值表中取得 scode=getNewUniqNo(KEYTYPE_CARD_STRU,&dUniqNo); if(0 != scode) { *pRetCode=E_DB_SYSKEY_R; sprintf(szMsg,"820121:取系统键值表错误,RetCode=%d\n",scode); db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ERR,szMsg); goto L_Ret; } //正确,赋值给结构体 acardstru.id = D2I(dUniqNo); scode=DB_t_cardstrut_add(&acardstru); if(0 != scode) { *pRetCode=E_DB_CARDSTRUT_I; sprintf(szMsg,"卡结构信息表插入错误,SQLLCODE=%d\n",scode); db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ERR,szMsg); goto L_Ret; } return 0; L_Ret: return -1; }
/** * Get a command count, with the '0' key. */ static int textui_get_count(void) { int count = 0; while (1) { struct keypress ke; prt(format("Repeat: %d", count), 0, 0); ke = inkey(); if (ke.code == ESCAPE) return -1; /* Simple editing (delete or backspace) */ else if (ke.code == KC_DELETE || ke.code == KC_BACKSPACE) count = count / 10; /* Actual numeric data */ else if (isdigit((unsigned char) ke.code)) { count = count * 10 + D2I(ke.code); if (count >= 9999) { bell("Invalid repeat count!"); count = 9999; } } /* Anything non-numeric passes straight to command input */ else { /* XXX nasty hardcoding of action menu key */ if (ke.code != KC_ENTER) Term_keypress(ke.code, ke.mods); break; } } return count; }
int record_serial(ST_PACK *in_pack,T_t_tif_tradeserial *tradeserial,ST_PACK *out_pack){ int ret =0; double dUniqno = 0; char sMsg[256]=""; // 准备数据插入交易流水表 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno); //获得最大流水号 if(ret) { writelog(LOG_ERR,"getNewUniqNo error,errcode=[%d]",ret); return ret; } tradeserial->serial_no = D2I(dUniqno); //流水号 out_pack->damt1=tradeserial->trade_fee; //充值金额 out_pack->damt0=tradeserial->out_balance; //出卡值 out_pack->lvol0=tradeserial->serial_no;//流水号 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) ret = E_DB_TRADESERIAL_E; else ret = E_DB_TRADESERIAL_I; return ret; } ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit error,errcode=[%d]",ret); return E_DB_COMMIT; } return 0; }
static int packege_send_data(ST_PACK *in_pack,int flag,char *send_data){ int ret =0; //char cellphone[31]=""; //充值手机号 double money=0; //充值金额 char sysdate[11]=""; char systime[9]=""; char sysdatetime[20]=""; char serialno[20]=""; char sMoney[20]=""; T_t_pif_card tCard; // ext_phone_trans_t phone_trans_struct; ext_phone_trans_t* phone_trans_struct; phone_trans_struct=(ext_phone_trans_t*)send_data; memset(&tCard,0,sizeof(tCard)); memset(phone_trans_struct,0,sizeof(ext_phone_trans_t)); phone_trans_struct->prix[0]=0x31; memcpy(phone_trans_struct->length,"0067",4); if(1==flag) { memcpy(phone_trans_struct->type,"0100",4); } else if(2==flag) { memcpy(phone_trans_struct->type,"0200",4); } //memcpy(phone_trans_struct->bitery,"0000000000000000",16); memset(phone_trans_struct->bitery,'0',sizeof(phone_trans_struct->bitery)); ret=DB_t_pif_card_read_by_card_id(in_pack->lvol0, &tCard); if(ret) { if(DB_NOTFOUND==ret) ret=E_CARDNO_NOT_EXIST; else ret=E_DB_CARD_R; return ret; } sprintf(phone_trans_struct->cutid,"%-22d",tCard.cosumer_id); money = in_pack->damt1; int i_money=D2I(D4U5(money*100,0)); sprintf(sMoney,"%07d",i_money); memcpy(phone_trans_struct->money,sMoney,sizeof(phone_trans_struct->money)); ret=get_datetime_from_db(sysdate,systime); if(ret) { writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret); getsysdate(sysdate); getsystime(systime); } strcpy(sysdatetime,sysdate+4); strcat(sysdatetime,systime); memcpy(phone_trans_struct->datetime,sysdatetime,10); memcpy(phone_trans_struct->tracenum,sysdate,8); sprintf(serialno,"%06d",in_pack->lvol6%1000000); memcpy(phone_trans_struct->tracenum+8,serialno,6); memcpy(phone_trans_struct->phone,in_pack->sphone,strlen(in_pack->sphone)); memcpy(phone_trans_struct->retnum,"00",2); memset(phone_trans_struct->plugdata,0x20,sizeof(phone_trans_struct->plugdata)); /* memcpy(send_data,phone_trans_struct->prix,1); memcpy(send_data+1,phone_trans_struct->length,4); memcpy(send_data+5,phone_trans_struct->type,4); memcpy(send_data+9,phone_trans_struct->bitery,16); memcpy(send_data+25,phone_trans_struct->cutid,22); memcpy(send_data+47,phone_trans_struct->money,7); memcpy(send_data+54,phone_trans_struct->datetime,10); memcpy(send_data+64,phone_trans_struct->tracenum,14); memcpy(send_data+78,phone_trans_struct->phone,11); memcpy(send_data+89,phone_trans_struct->retnum,2); memcpy(send_data+91,phone_trans_struct->plugdata,36); */ writelog(LOG_ERR,"package send data=[%s]",send_data); return 0; }
/* * Extract a direction (or zero) from a character */ int target_dir(char ch) { int d = 0; int mode; cptr act; cptr s; /* Already a direction? */ if (isdigit((unsigned char) ch)) { d = D2I(ch); } else if (isarrow(ch)) { switch (ch) { case ARROW_DOWN: d = 2; break; case ARROW_LEFT: d = 4; break; case ARROW_RIGHT: d = 6; break; case ARROW_UP: d = 8; break; } } else { /* Roguelike */ if (OPT(rogue_like_commands)) { mode = KEYMAP_MODE_ROGUE; } /* Original */ else { mode = KEYMAP_MODE_ORIG; } /* Extract the action (if any) */ act = keymap_act[mode][(byte) (ch)]; /* Analyze */ if (act) { /* Convert to a direction */ for (s = act; *s; ++s) { /* Use any digits in keymap */ if (isdigit((unsigned char) *s)) d = D2I(*s); } } } /* Paranoia */ if (d == 5) d = 0; /* Return direction */ return (d); }
static int packege_elec_request(ST_PACK *in_pack,int flag,char *send_data){ int ret; ext_elect_req_t* elect_req_t; elect_req_t=(ext_elect_req_t*)send_data; double money=0; //充值金额 char serialno[10]=""; char sysdate[11]=""; char systime[9]=""; char sysdatetime[20]=""; unsigned char buf[106]=""; unsigned char soutmd5[16]=""; char outmd5[32]=""; T_t_pif_card tCard; memset(&tCard,0,sizeof(tCard)); if(flag==1){//房间查询不加密 memcpy(elect_req_t->prix,"0",1); }else{ memcpy(elect_req_t->prix,"1",1); } memcpy(elect_req_t->length,"0141",4); if(flag==1){ memcpy(elect_req_t->type,"0001",4); }else if(flag==2){ memcpy(elect_req_t->type,"0002",4); } memset(elect_req_t->bitery,'0',sizeof(elect_req_t->bitery)); sprintf(elect_req_t->room,"%-20s",in_pack->saddr); ret=DB_t_pif_card_read_by_card_id(in_pack->lvol0, &tCard); if(ret) { if(DB_NOTFOUND==ret) ret=E_CARDNO_NOT_EXIST; else ret=E_DB_CARD_R; return ret; } sprintf(elect_req_t->cutid,"%-22d",tCard.cosumer_id); money = in_pack->damt1; int i_money=D2I(D4U5(money*100,0)); sprintf(elect_req_t->money,"%07d",i_money); ret=get_datetime_from_db(sysdate,systime); if(ret) { writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret); getsysdate(sysdate); getsystime(systime); } strcpy(sysdatetime,sysdate+4); strcat(sysdatetime,systime); memcpy(elect_req_t->datetime,sysdatetime,10); memcpy(elect_req_t->tracenum,sysdate,8); sprintf(serialno,"%010d",in_pack->lvol6); memcpy(elect_req_t->tracenum+8,serialno,10); memcpy(elect_req_t->retnum,"0000",4); memcpy(elect_req_t->clientid,"0001",4); memset(outmd5,'0',32); if(flag==1){ sprintf(elect_req_t->signcheck,"%s",outmd5); }else if(flag==2){ memcpy(buf,elect_req_t->type,105); writelog(LOG_ERR,"buf data=[%s]",buf); CalcMD5(buf,105,soutmd5); dec2hex(soutmd5,16,outmd5); writelog(LOG_ERR,"outmd5 data=[%s]",outmd5); sprintf(elect_req_t->signcheck,"%s",outmd5); } return 0; }
/////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// //系统模拟入账 int tend_to_enter_account(ST_PACK *in_pack,InAcc *IA,int trade_code,T_t_tif_tradeserial *tradeserial){ int ret = 0; int i=0; int card_id = 0; char Operator[33+1] = ""; int maindevice_id = 0; int device_id = 0; char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; double dUniqno = 0; char sMsg[256]=""; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; T_t_aif_account tAccount; T_t_pif_card tCard; memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tAccount,0,sizeof(tAccount)); memset(&tCard,0,sizeof(tCard)); card_id=in_pack->lvol0; ret=get_datetime_from_db(sysdate,systime); if(ret) { writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret); getsysdate(sysdate); getsystime(systime); return ret; } ret=GetLogicDate(logicdate); //业务日期 if(ret) { writelog(LOG_ERR,"GetLogicDate error,errcode=[%d]",ret); return ret; } ret=DB_t_pif_card_read_by_card_id(card_id, &tCard); if(ret) { if(DB_NOTFOUND==ret) ret=E_CARDNO_NOT_EXIST; else ret=E_DB_CARD_R; return ret; } if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0) { if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) ret= E_CARDNO_LOGOUT; else if('3'==tCard.state_id[CARDSTAT_TYPE_REG]) ret = E_CARD_CHANGE; else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE) ret=E_CARDNO_LOST; else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) ret=E_CARDNO_FREEZE; else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) ret=E_CARDNO_WFAIL; return ret; } //根据卡号和钱包号得到消费者账号(借方) 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) ret=E_ACTNO_NOT_EXIST; else ret=E_DB_ACCOUNT_R; return ret; } 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) ret= E_CUSTOMER_NOT_EXIST; else ret= E_DB_CUSTOMER_R; return ret; } //得到收费类别 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(); return E_DB_SPEFEE_R; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) ret= E_CUSTOMER_NOT_EXIST; else ret= E_DB_CUSTOMER_U; return ret; } } DB_t_cif_customer_free_lock_cur(); des2src(Operator,in_pack->scust_no); //操作员号 //采集设备标识 // 准备数据插入交易流水表 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno); //获得最大流水号 if(ret) { writelog(LOG_ERR,"getNewUniqNo error,errcode=[%d]",ret); return ret; } strncpy(tradeserial->operate_date,sysdate,sizeof(sysdate)-1); //发生日期 strncpy(tradeserial->operate_time,systime,sizeof(systime)-1); des2src(tradeserial->collect_date,tradeserial->operate_date); //采集日期 des2src(tradeserial->collect_time,tradeserial->operate_time); //采集时间 des2src(tradeserial->enteract_date,logicdate); //处理日期 des2src(tradeserial->enteract_time,tradeserial->operate_time); //处理时间 tradeserial->serial_no = D2I(dUniqno); //流水号 tradeserial->serial_type = trade_code; //流水类型 tradeserial->purse_id = PURSE_NO_ONE; //钱包号 tradeserial->serial_state = SERISTAT_NODEBT; //流水状态 tradeserial->maindevice_id = maindevice_id; //上传工作站标识 tradeserial->device_id = device_id; //采集设备标识 tradeserial->card_id = card_id; //交易卡号 tradeserial->customer_id=tCard.cosumer_id; //客户号 des2src(tradeserial->oper_code,Operator); tradeserial->trade_count=in_pack->lvol1+1; //交易次数 tradeserial->in_balance=in_pack->damt0; //入卡值 tradeserial->trade_fee=in_pack->damt1; //交易金额 strncpy(tradeserial->reserve_2,in_pack->vsmess,sizeof(tradeserial->reserve_2)-1); IA->iCardNo=tCard.card_id; IA->iFeeType=tCustomer.fee_type; IA->dArrInAmt[0]=tradeserial->trade_fee; IA->iMainDevId=tradeserial->maindevice_id; //工作站标识 IA->iDevId=tradeserial->device_id; //设备ID IA->iSerialNo=tradeserial->serial_no; //流水号 IA->iTradeNo=tradeserial->serial_type; //交易码 strcpy(IA->sTxDate,tradeserial->operate_date); //交易日期 strcpy(IA->sTxTime,tradeserial->operate_time); //交易时间 strcpy(IA->sTxCollectDate,tradeserial->collect_date); //采集日期 strcpy(IA->sTxCollectTime,tradeserial->collect_time); //采集时间 strcpy(IA->sTxAccDate,tradeserial->enteract_date); //记账日期 strcpy(IA->sTxAccTime,tradeserial->enteract_time); //记账时间 strcpy(IA->sMdeOper,tradeserial->oper_code); //操作员 strcpy(IA->sChkOper,tradeserial->reserve_1); //复核操作员 IA->iUseCardFlag=USE_CARD_TYPE_ONLINE; //联机交易 IA->iTxCnt=tradeserial->trade_count; //交易次数 IA->dInCardBala=tradeserial->in_balance; //入卡值 IA->dOutCardBala=-1; //出卡值 //修改借方和贷方帐户余额,记会计分录帐 ret=AccountProcess(IA); if(ret) { writelog(LOG_ERR,"AccountProcess ret[%d]",ret); return ret; } tradeserial->out_balance=IA->dOutCardBala; //出卡值 if(amtcmp(tradeserial->out_balance,0)<0) { return E_ENTER_ACCOUNT; } 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_BANK_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_SUBSIDY_PRE_TOLL_BOARD_CASH: case TXTYPE_SUBSIDY_PRE_TOLL_BOARD_BILL: case TXTYPE_SUBSIDY_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]); } } ret = db_rollback(); if(ret) { writelog(LOG_ERR,"db_roll_back error,errcode=[%d]",ret); return E_DB_ROLLBACK; } return 0; }
int F847102(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret = 0; // char logicdate[11] = ""; // char enddate[10 + 1] = ""; int card_id = 0; char Operator[33+1] = ""; // int Cut_id = 0; int maindevice_id = 0; int device_id = 0; char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; double dUniqno = 0; T_t_pif_cardlossinfo cardlossinfo; T_t_tif_black_sheet black_sheet; T_t_tif_tradeserial tradeserial; T_t_tif_meslist tMesList; T_t_pif_card tCard; memset(&tradeserial,0,sizeof(tradeserial)); memset(&cardlossinfo,0,sizeof(cardlossinfo)); memset(&black_sheet,0,sizeof(black_sheet)); memset(&tMesList,0,sizeof(tMesList)); memset(&tCard,0,sizeof(tCard)); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } card_id = rPack->lvol1; //卡标识 // Cut_id = rPack->lvol0; //客户号 des2src(Operator,rPack->scust_limit); //操作员号 maindevice_id = rPack->lvol6; //上传工作站标识 device_id = rPack->lvol7; //采集设备标识 // 检查客户信息,判断是否可以挂失 //修改卡标志,置为正常状态 ret=DB_t_pif_card_read_lock_by_cur_and_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) { DB_t_pif_card_free_lock_by_cur(); writelog(LOG_ERR,"card_id[%d] db card_id[%d]",card_id,tCard.card_id); *pRetCode=E_DB_CARD_R; goto L_RETU; } if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) { DB_t_pif_card_free_lock_by_cur(); *pRetCode = E_CARDNO_LOGOUT; goto L_RETU; } if('3'==tCard.state_id[CARDSTAT_TYPE_REG]) { DB_t_pif_card_free_lock_by_cur(); *pRetCode = E_CARDNO_WFAIL; goto L_RETU; } if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_LOST]) { DB_t_pif_card_free_lock_by_cur(); *pRetCode = E_CARDNO_LOST; goto L_RETU; } tCard.state_id[CARDSTAT_TYPE_LOST]=STATE_TRUE; // 修改卡状态为挂失 ret=DB_t_pif_card_update_lock_by_cur(&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_U; goto L_RETU; } DB_t_pif_card_free_lock_by_cur(); // 插入卡挂失有效期限表 /* ret=GetLostCardValiddate(sysdate,enddate); //获得挂失有效期限 if (ret) { *pRetCode = ret; goto L_RETU; } cardlossinfo.card_id = card_id; //卡号 des2src(cardlossinfo.begin_date,sysdate); //起始日期 des2src(cardlossinfo.end_date,enddate); //截至日期 des2src(cardlossinfo.operate_date,sysdate); //操作日期 des2src(cardlossinfo.operate_time,systime); //操作时间 cardlossinfo.state_id=STATE_VALID; //有效 ret = DB_t_pif_cardlossinfo_add(&cardlossinfo); if (ret) { *pRetCode = E_DB_CARDLOSSINFO_I; writelog(LOG_ERR,"errcode[%d] ",ret); goto L_RETU; } */ //如果该卡号被冻结,则挂失时对黑名单不处理 if(STATE_FALSE==tCard.state_id[CARDSTAT_TYPE_FREEZE]) { // 插入黑名单表 ret=DB_t_tif_black_sheet_del_by_card_id_and_is_ad(tCard.card_id,DELETE_BLACKLIST); if(ret) { if(ret!=DB_NOTFOUND) { *pRetCode=ret; goto L_RETU; } } ret=InsertToBlkList(tCard.card_id,ADD_BLACKLIST); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"InsertToBlkList err[%d]",ret); goto L_RETU; } //广播黑名单 AddXmlItemInt(tMesList.incontent, XML_KEY_CARDID,card_id); AddXmlItemInt(tMesList.incontent, XML_KEY_ADDDELSIGN,ADD_BLACKLIST); //增删标志 tMesList.funid = 930005; tMesList.pfunid = 930003; tMesList.max_send_cnt = 10; tMesList.level = MESLIST_PRIORITY_REALTIME; tMesList.msgtype = MESLIST_TYPE_ORDER; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } } // 准备数据插入交易流水表 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ERRCODE = [%d]",ret); goto L_RETU; } 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.serial_no = D2I(dUniqno); //流水号 tradeserial.serial_type = TXCODE_CARD_LOSS; //挂失 tradeserial.serial_state = SERISTAT_NONEEDDEBT; //流水状态 tradeserial.maindevice_id = maindevice_id; //上传工作站标识 tradeserial.device_id = device_id; //采集设备标识 tradeserial.card_id = card_id; //交易卡号 tradeserial.customer_id=tCard.cosumer_id; //客户号 des2src(tradeserial.oper_code,Operator); 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; } 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; }
mlib_status CONV_FUNC(MxN)(mlib_image *dst, const mlib_image *src, const mlib_s32 *kernel, mlib_s32 m, mlib_s32 n, mlib_s32 dm, mlib_s32 dn, mlib_s32 scale, mlib_s32 cmask) { FTYPE buff[BUFF_SIZE], *buffs_arr[2*(MAX_N + 1)]; FTYPE **buffs = buffs_arr, *buffd; FTYPE akernel[256], *k = akernel, fscale = DSCALE; mlib_s32 mn, l, off, kw, bsize, buff_ind; mlib_s32 d0, d1; FTYPE k0, k1, k2, k3, k4, k5, k6; FTYPE p0, p1, p2, p3, p4, p5, p6, p7; d64_2x32 dd; DEF_VARS(DTYPE); mlib_s32 chan2; mlib_s32 *buffo, *buffi; mlib_status status = MLIB_SUCCESS; GET_SRC_DST_PARAMETERS(DTYPE); if (scale > 30) { fscale *= 1.0/(1 << 30); scale -= 30; } fscale /= (1 << scale); mn = m*n; if (mn > 256) { k = mlib_malloc(mn*sizeof(mlib_d64)); if (k == NULL) return MLIB_FAILURE; } for (i = 0; i < mn; i++) { k[i] = kernel[i]*fscale; } if (m == 1) { status = mlib_ImageConv1xN(dst, src, k, n, dn, cmask); FREE_AND_RETURN_STATUS; } bsize = (n + 3)*wid; if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); if (pbuff == NULL) { status = MLIB_FAILURE; FREE_AND_RETURN_STATUS; } buffs = (FTYPE **)(pbuff + bsize); } for (l = 0; l < (n + 1); l++) buffs[l] = pbuff + l*wid; for (l = 0; l < (n + 1); l++) buffs[l + (n + 1)] = buffs[l]; buffd = buffs[n] + wid; buffo = (mlib_s32*)(buffd + wid); buffi = buffo + (wid &~ 1); chan1 = nchannel; chan2 = chan1 + chan1; wid -= (m - 1); hgt -= (n - 1); adr_dst += dn*dll + dm*nchannel; for (c = 0; c < nchannel; c++) { if (!(cmask & (1 << (chan1 - 1 - c)))) continue; sl = adr_src + c; dl = adr_dst + c; for (l = 0; l < n; l++) { FTYPE *buff = buffs[l]; #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i < wid + (m - 1); i++) { buff[i] = (FTYPE)sl[i*chan1]; } sl += sll; } buff_ind = 0; #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i < wid; i++) buffd[i] = 0.0; for (j = 0; j < hgt; j++) { FTYPE **buffc = buffs + buff_ind; FTYPE *buffn = buffc[n]; FTYPE *pk = k; for (l = 0; l < n; l++) { FTYPE *buff_l = buffc[l]; for (off = 0; off < m;) { FTYPE *buff = buff_l + off; kw = m - off; if (kw > 2*MAX_KER) kw = MAX_KER; else if (kw > MAX_KER) kw = kw/2; off += kw; sp = sl; dp = dl; p2 = buff[0]; p3 = buff[1]; p4 = buff[2]; p5 = buff[3]; p6 = buff[4]; p7 = buff[5]; k0 = pk[0]; k1 = pk[1]; k2 = pk[2]; k3 = pk[3]; k4 = pk[4]; k5 = pk[5]; k6 = pk[6]; pk += kw; if (kw == 7) { if (l < (n - 1) || off < m) { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = p5; p4 = p6; p5 = p7; p6 = buff[i + 6]; p7 = buff[i + 7]; buffd[i ] += p0*k0 + p1*k1 + p2*k2 + p3*k3 + p4*k4 + p5*k5 + p6*k6; buffd[i + 1] += p1*k0 + p2*k1 + p3*k2 + p4*k3 + p5*k4 + p6*k5 + p7*k6; } } else { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = p5; p4 = p6; p5 = p7; p6 = buff[i + 6]; p7 = buff[i + 7]; LOAD_BUFF(buffi); dd.d64 = *(FTYPE *)(buffi + i); buffn[i ] = (FTYPE)dd.i32s.i0; buffn[i + 1] = (FTYPE)dd.i32s.i1; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + p3*k3 + p4*k4 + p5*k5 + p6*k6 + buffd[i ]); d1 = D2I(p1*k0 + p2*k1 + p3*k2 + p4*k3 + p5*k4 + p6*k5 + p7*k6 + buffd[i + 1]); dp[0 ] = FROM_S32(d0); dp[chan1] = FROM_S32(d1); buffd[i ] = 0.0; buffd[i + 1] = 0.0; sp += chan2; dp += chan2; } } } else if (kw == 6) { if (l < (n - 1) || off < m) { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = p5; p4 = p6; p5 = buff[i + 5]; p6 = buff[i + 6]; buffd[i ] += p0*k0 + p1*k1 + p2*k2 + p3*k3 + p4*k4 + p5*k5; buffd[i + 1] += p1*k0 + p2*k1 + p3*k2 + p4*k3 + p5*k4 + p6*k5; } } else { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = p5; p4 = p6; p5 = buff[i + 5]; p6 = buff[i + 6]; buffn[i ] = (FTYPE)sp[0]; buffn[i + 1] = (FTYPE)sp[chan1]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + p3*k3 + p4*k4 + p5*k5 + buffd[i ]); d1 = D2I(p1*k0 + p2*k1 + p3*k2 + p4*k3 + p5*k4 + p6*k5 + buffd[i + 1]); dp[0 ] = FROM_S32(d0); dp[chan1] = FROM_S32(d1); buffd[i ] = 0.0; buffd[i + 1] = 0.0; sp += chan2; dp += chan2; } } } else if (kw == 5) { if (l < (n - 1) || off < m) { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = p5; p4 = buff[i + 4]; p5 = buff[i + 5]; buffd[i ] += p0*k0 + p1*k1 + p2*k2 + p3*k3 + p4*k4; buffd[i + 1] += p1*k0 + p2*k1 + p3*k2 + p4*k3 + p5*k4; } } else { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = p5; p4 = buff[i + 4]; p5 = buff[i + 5]; buffn[i ] = (FTYPE)sp[0]; buffn[i + 1] = (FTYPE)sp[chan1]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + p3*k3 + p4*k4 + buffd[i ]); d1 = D2I(p1*k0 + p2*k1 + p3*k2 + p4*k3 + p5*k4 + buffd[i + 1]); dp[0 ] = FROM_S32(d0); dp[chan1] = FROM_S32(d1); buffd[i ] = 0.0; buffd[i + 1] = 0.0; sp += chan2; dp += chan2; } } } else if (kw == 4) { if (l < (n - 1) || off < m) { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = buff[i + 3]; p4 = buff[i + 4]; buffd[i ] += p0*k0 + p1*k1 + p2*k2 + p3*k3; buffd[i + 1] += p1*k0 + p2*k1 + p3*k2 + p4*k3; } } else { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = buff[i + 3]; p4 = buff[i + 4]; buffn[i ] = (FTYPE)sp[0]; buffn[i + 1] = (FTYPE)sp[chan1]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + p3*k3 + buffd[i ]); d1 = D2I(p1*k0 + p2*k1 + p3*k2 + p4*k3 + buffd[i + 1]); dp[0 ] = FROM_S32(d0); dp[chan1] = FROM_S32(d1); buffd[i ] = 0.0; buffd[i + 1] = 0.0; sp += chan2; dp += chan2; } } } else if (kw == 3) { if (l < (n - 1) || off < m) { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = buff[i + 2]; p3 = buff[i + 3]; buffd[i ] += p0*k0 + p1*k1 + p2*k2; buffd[i + 1] += p1*k0 + p2*k1 + p3*k2; } } else { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = p3; p2 = buff[i + 2]; p3 = buff[i + 3]; buffn[i ] = (FTYPE)sp[0]; buffn[i + 1] = (FTYPE)sp[chan1]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + buffd[i ]); d1 = D2I(p1*k0 + p2*k1 + p3*k2 + buffd[i + 1]); dp[0 ] = FROM_S32(d0); dp[chan1] = FROM_S32(d1); buffd[i ] = 0.0; buffd[i + 1] = 0.0; sp += chan2; dp += chan2; } } } else /*if (kw == 2)*/ { if (l < (n - 1) || off < m) { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = buff[i + 1]; p2 = buff[i + 2]; buffd[i ] += p0*k0 + p1*k1; buffd[i + 1] += p1*k0 + p2*k1; } } else { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (i = 0; i <= (wid - 2); i += 2) { p0 = p2; p1 = buff[i + 1]; p2 = buff[i + 2]; buffn[i ] = (FTYPE)sp[0]; buffn[i + 1] = (FTYPE)sp[chan1]; d0 = D2I(p0*k0 + p1*k1 + buffd[i ]); d1 = D2I(p1*k0 + p2*k1 + buffd[i + 1]); dp[0 ] = FROM_S32(d0); dp[chan1] = FROM_S32(d1); buffd[i ] = 0.0; buffd[i + 1] = 0.0; sp += chan2; dp += chan2; } } } } } /* last pixels */ for (; i < wid; i++) { FTYPE *pk = k, s = 0; mlib_s32 x, d0; for (l = 0; l < n; l++) { FTYPE *buff = buffc[l] + i; for (x = 0; x < m; x++) s += buff[x] * (*pk++); } d0 = D2I(s); dp[0] = FROM_S32(d0); buffn[i] = (FTYPE)sp[0]; sp += chan1; dp += chan1; } for (l = 0; l < (m - 1); l++) buffn[wid + l] = sp[l*chan1]; /* next line */ sl += sll; dl += dll; buff_ind++; if (buff_ind >= n + 1) buff_ind = 0; } } FREE_AND_RETURN_STATUS; }
int F847226(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; int card_id; char oper_code[11] = ""; char sysdate[9] = ""; char systime[7] = ""; char work_key[51] = ""; T_t_pif_operator tOper; T_t_pif_oper_authcard tAuthCard; T_t_tif_tradeserial tSerial; double uni_no = 0.0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tOper,0,sizeof tOper); memset(&tAuthCard,0,sizeof tAuthCard); memset(&tSerial,0,sizeof tSerial); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_SCUST_LIMIT,F_SCUST_LIMIT2,F_SDATE2,F_SBANK_ACC,0); des2src(oper_code,rPack->sname2); if(strlen(oper_code) == 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scust_limit) == 0) { *pRetCode = E_INPUT_OPER_NULL; goto L_RETU; } if((ret = IsInvalidDateTime(rPack->sdate2,"YYYYMMDD"))) { *pRetCode = ret; goto L_RETU; } ret = DB_t_pif_operator_read_by_oper_code(oper_code,&tOper); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_OPER_NOT_EXIST; else *pRetCode = E_DB_OPERATOR_R; goto L_RETU; } if(strcmp(OPERATOR_LOGOUT,tOper.status) == 0) { writelog(LOG_ERR,"操作员[%s]已注销",oper_code); *pRetCode = E_OPERLOGON_UNREG; goto L_RETU; } //todo:判断如果该操作员持有该卡已经发行过,那么系统允许重复发行,但是不计流水 //todo:用于解决操作员发行卡失败后,必须回收卡才能继续处理的问题 ret=is_already_publish_authcard(rPack->sname,oper_code,&card_id); if(!ret) { //writelog(LOG_ERR,"physical_no=[%s],oper_code=[%s],card_id=[%d]",rPack->sname,oper_code,card_id); ret = DB_t_pif_oper_authcard_read_by_card_id(card_id,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_AUTHCARD_NOT_EXISTS; else *pRetCode = E_DB_OPER_AUTHCARD_R; goto L_RETU; } out_pack->lvol0 = tAuthCard.card_id; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expired_date); des2src(out_pack->scust_limit,tAuthCard.oper_code); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.oper_name); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } if((ret = is_oper_has_authcard(oper_code))) { if(ret == 1) *pRetCode = E_OPER_ALREADY_HAS_AUTHCARD; else *pRetCode = ret; goto L_RETU; } ret=is_physical_no_in_use(rPack->sname); if(ret) { *pRetCode = ret; goto L_RETU; } ret=GetParameter(GLOBE_999_DEVAUTHKEY,work_key); if( ret) { *pRetCode= ret; goto L_RETU; } ret = getNewUniqNo(KEYTYPE_CARD_ID,&uni_no); if(ret) { *pRetCode = ret; goto L_RETU; } tAuthCard.card_id = D2I(uni_no); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&uni_no); if(ret) { *pRetCode = ret; goto L_RETU; } tSerial.serial_no = D2I(uni_no); getsysdate(sysdate); getsystime(systime); des2src(tAuthCard.issue_date,sysdate); des2src(tAuthCard.issue_time,systime); des2src(tAuthCard.oper_code,oper_code); des2src(tAuthCard.card_phyid,rPack->sname); des2src(tAuthCard.expired_date,rPack->sdate2); tAuthCard.privilege = rPack->lvol0; tAuthCard.status = AUTHCARD_STATUS_NORMAL; // TODO : 检查物理卡号是否已经存在 ret = DB_t_pif_oper_authcard_add(&tAuthCard); if(ret) { if(DB_REPEAT == ret) { writelog(LOG_ERR,"授权卡交易卡号已存在[%d]",tAuthCard.card_id); *pRetCode = E_DB_OPER_AUTHCARD_E; } else *pRetCode = E_DB_OPER_AUTHCARD_I; goto L_RETU; } tSerial.card_id = tAuthCard.card_id; tSerial.serial_state = SERISTAT_NONEEDDEBT; tSerial.serial_type = TXCODE_ISSUE_AUTHCARD; des2src(tSerial.operate_date,sysdate); des2src(tSerial.operate_time,systime); des2src(tSerial.enteract_date,sysdate); des2src(tSerial.enteract_time,systime); des2src(tSerial.collect_date,sysdate); des2src(tSerial.collect_time,systime); des2src(tSerial.oper_code,rPack->scust_limit); ret = DB_t_tif_tradeserial_add(&tSerial); if(ret) { if(DB_REPEAT == ret) { writelog(LOG_ERR,"记录流水表失败!"); *pRetCode = E_DB_TRADESERIAL_E; } else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } writelog(LOG_DEBUG,"发行授权卡成功,操作员[%s]交易卡号[%d]流水号[%d]" ,tAuthCard.oper_code,tAuthCard.card_id,tSerial.serial_no); out_pack->lvol0 = tAuthCard.card_id; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expired_date); des2src(out_pack->scust_limit,tAuthCard.oper_code); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.oper_name); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
static int elect_request_changzhou(ST_PACK *in_pack,char ext_msg[256]){ int ret = 0; char c_drtbranch[10]=""; char c_bccbasefuncno[10]=""; int DRTP_BRANCH =0; int BCC_BASEFUNCNO =0; ST_PACK ArrayPack; // 设置返回包 ST_CPACK aPack; // 设置应答包 ST_CPACK sPack; // 设置发送包 int card_id; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; T_t_aif_account tAccount; T_t_pif_card tCard; memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tAccount,0,sizeof(tAccount)); memset(&tCard,0,sizeof(tCard)); card_id=in_pack->lvol0; ret=DB_t_pif_card_read_by_card_id(card_id, &tCard); if(ret) { if(DB_NOTFOUND==ret) ret=E_CARDNO_NOT_EXIST; else ret=E_DB_CARD_R; return ret; } 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) ret= E_CUSTOMER_NOT_EXIST; else ret= E_DB_CUSTOMER_R; return ret; } ret=GetParameter(2501, c_drtbranch); if(ret){ writelog(LOG_ERR,"get_parameter error,error code=[%d]",ret); return ret; } ret=GetParameter(2502, c_bccbasefuncno); if(ret){ writelog(LOG_ERR,"get_parameter error,error code=[%d]",ret); return ret; } DRTP_BRANCH = atoi(c_drtbranch); BCC_BASEFUNCNO = atoi(c_bccbasefuncno); ResetNormalCPack(&aPack, 0, 1); memset(&ArrayPack, 0, sizeof(ArrayPack)); ResetNormalCPack(&sPack, 0, 1); SetHeadCol(&sPack, F_SSECTYPES,F_LVOL0,F_LVOL1,F_SORDER0,F_SCUST_AUTH,0); // 设置发送windows BU的头部视图信息 sPack.head.RequestType = 847357; sPack.pack.lvol0=in_pack->lvol10;//房间号 sPack.pack.lvol1=D2I(in_pack->damt1*100);//转账金额(分) memcpy(sPack.pack.sorder0,tCustomer.cut_name,11); ret = ExtCall(0, DRTP_BRANCH, BCC_BASEFUNCNO, 0, TIMEOUT, &sPack, &aPack, &ArrayPack); if (ret < 0||aPack.head.retCode!=0) { if(ret<0) { writelog(LOG_ERR,"Call 847357 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode); return ret; } else { writelog(LOG_ERR,"Call 847357 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode); return aPack.head.retCode; } } return 0; }
int F847101(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_cif_customer tCustomer; T_t_pif_card tCard; T_t_aif_account tAccount; T_t_tif_tradeserial tradeserial; T_t_tif_savdtl tSavdtl; T_t_pif_spefee tSpeFee; double dUniqNo = 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)); #ifdef DEBUG writelog(LOG_DEBUG,"rPack->scust_auth2[%s]",rPack->scust_auth2); #endif 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_LSERIAL1,F_VSMESS,0); hi_cutid = rPack->lvol0; //客户ID hi_cuttype = rPack->lvol3; //客户类别 des2src(h_showcardid,rPack->scust_no); //显示卡号 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_by_cut_id(hi_cutid, &tCustomer); //得到收费类别 memset(&tCustomer,0,sizeof tCustomer); 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(); tradeserial.trade_fee =D4U5(rPack->damt0,2); //检查金额是否超过最大额度 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,16); //读种子密钥 if(strlen(tCustomer.can_time)==8) { ret=IsInvalidDateTime(tCustomer.can_time,"YYYYMMDD"); if(ret) { *pRetCode=E_TB_CUSTOMER_ENDTIME; goto L_RETU; } if(strncmp(tCustomer.can_time,sysdate,8)<=0) { *pRetCode=E_TB_CUSTOMER_ENDTIME; goto L_RETU; } des2src(card_endtime,tCustomer.can_time); } else if(strlen(rPack->sdate0)==0) { *pRetCode=E_TB_CUSTOMER_NO_ENDTIME; goto L_RETU; } else { 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); } // 默认密码, 初始取身份证的后6位, 没有身份证号用666666. len=strlen(tCustomer.man_id) ; if (len >= 6) { strncpy(h_password,&(tCustomer.man_id[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; 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_NORMAL; //卡类别 EncodePwd(seed_key,h_password,tCard.password,0); //卡密码 tCard.cosumer_id = hi_cutid; //客户标识 tCard.account_count = ACCOUNT_COUNT_ONE; //卡对应帐户个数 des2src(tCard.begin_time,sysdate); //注册时间 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 = tCustomer.cut_id; //客户号 des2src(tAccount.cut_name,tCustomer.cut_name); //客户名称 tAccount.cut_type = tCustomer.cut_type; //客户类别 des2src(tAccount.stuemp_no,tCustomer.stuemp_no); //客户学号或员工号 tAccount.card_id = tCard.card_id; //关联卡号 tAccount.purse_id = PURSE_NO_ONE; //关联卡钱包号 tAccount.card_type = CT_NORMAL; //卡类别 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,&dUniqNo); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } // add by 汤成2005-09-05 // 记录发行正式卡信息 ///////////////////////////////////////////////////////////////////////// ret = InsertToCutUpdList(tCard.card_id, CUTUPD_ADD,tCard.physical_no); if( ret ) { *pRetCode = ret; goto L_RETU; } ///////////////////////////////////////////////////////////////////////// tradeserial.serial_no = D2I(dUniqNo); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 tradeserial.serial_type =TXCODE_CARD_OPEN_CASH; 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: //经费本 // 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,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; 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) { *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; } /* // 增加发行新卡时的门禁名单表检查 ret = CheckNewCardHook(&tCustomer, tCard.card_id); if(ret) { *pRetCode = ret; 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->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847103(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret = 0; int hi_cardid = 0; char hi_Operator[33+1] = ""; int hi_Cut_id = 0; int hi_maindevice_id = 0; int hi_device_id = 0; int card_is_lost = 0; double h_temp_Serial_no = 0; char logicdate[11]=""; char sysdate[11]=""; char systime[8]=""; char dbdate[9]=""; char dbtime[7]=""; char volume[13]=""; T_t_tif_tradeserial tradeserial; T_t_pif_card tCard; T_t_tif_meslist tMesList; T_t_pif_device t_device; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); //用于根据请求包整理本CPACK包的头清空包头位图和包体中的数据 memset(&t_device,0,sizeof(t_device)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tCard,0,sizeof(tCard)); memset(&tMesList,0,sizeof(tMesList)); hi_cardid = rPack->lvol1; //卡标识 hi_Cut_id = rPack->lvol2; //客户号 des2src(hi_Operator,rPack->scust_limit); //操作员号 hi_maindevice_id = rPack->lvol6; //上传工作站标识 hi_device_id = rPack->lvol7; //采集设备标识 if(hi_maindevice_id==0&&hi_device_id!=0) { DB_t_pif_device_read_by_device_id(hi_device_id, &t_device); hi_maindevice_id=t_device.subsystem_id; } getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } // 检查卡状态是否为挂失 ret = DB_t_pif_card_read_lock_by_cur_and_card_id(hi_cardid,&tCard); if (ret) { writelog(LOG_ERR,"card_id[%d]",hi_cardid); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode=E_DB_CARD_R; goto L_RETU; } hi_Cut_id=tCard.cosumer_id; if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) { DB_t_pif_card_free_lock_by_cur(); *pRetCode = E_CARDNO_LOGOUT; goto L_RETU; } if('1'==tCard.state_id[CARDSTAT_TYPE_FREEZE]) { DB_t_pif_card_free_lock_by_cur(); *pRetCode = E_CARDNO_FREEZE; goto L_RETU; } card_is_lost = (tCard.state_id[CARDSTAT_TYPE_LOST] == STATE_TRUE) ? 1 : 0; if(card_is_lost) { ret=IsExistNoLostCardByCustomId(hi_Cut_id); if(ret) { if(E_NORMALCARD_NOLOST==ret) { *pRetCode = E_BACK_CARD_FOR_NORCARD2; } else if( E_TEMPCARD_NOLOST==ret) { //如果存在正常使用的临时卡,则提示请退掉此卡,不能解挂 if(tCard.type_id==CT_NORMAL) *pRetCode =E_BACK_CARD_FOR_NORCARD; else *pRetCode =E_BACK_CARD_FOR_TMPCARD; } else { *pRetCode = ret; } DB_t_pif_card_free_lock_by_cur(); goto L_RETU; } } tCard.state_id[CARDSTAT_TYPE_LOST]=STATE_FALSE; ret=DB_t_pif_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"card_id[%d]",hi_cardid); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_U; goto L_RETU; } DB_t_pif_card_free_lock_by_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&h_temp_Serial_no); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ERRCODE = [%d]",ret); goto L_RETU; } 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.serial_no = D2I(h_temp_Serial_no); //流水号 tradeserial.serial_type = TXCODE_CARD_COMEBACK_LOSS; //解挂 tradeserial.serial_state = SERISTAT_NONEEDDEBT; //流水状态 tradeserial.maindevice_id = hi_maindevice_id; //上传工作站标识 tradeserial.device_id = hi_device_id; //采集设备标识 tradeserial.card_id = hi_cardid; //交易卡号 tradeserial.customer_id = hi_Cut_id; des2src(tradeserial.oper_code, hi_Operator); /* if(!card_is_lost) { //允许重复解挂 //再下传白名单 // 插入黑名单表 ret=InsertToBlkList(hi_cardid,DELETE_BLACKLIST); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"InsertToBlkList err[%d]",ret); goto L_RETU; } //广播黑名单 AddXmlItemInt(tMesList.incontent, XML_KEY_CARDID,hi_cardid); AddXmlItemInt(tMesList.incontent, XML_KEY_ADDDELSIGN,DELETE_BLACKLIST); //增删标志 tMesList.funid = 930005; tMesList.pfunid = 930003; tMesList.max_send_cnt = 10; tMesList.level = MESLIST_PRIORITY_REALTIME; tMesList.msgtype = MESLIST_TYPE_ORDER; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } ret = SaveCancelLossSerial(&tradeserial); if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } ret=GetCardMaxBlkVerNo(hi_cardid,volume); if(ret) { *pRetCode = ret; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_SSERIAL0,0); des2src(out_pack->sserial0,volume); //卡版本号 //writelog(LOG_ERR,"volume:[%s]",volume); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } */ if(STATE_FALSE==tCard.state_id[CARDSTAT_TYPE_FREEZE]) { //插入黑名单表 ret=InsertToBlkList(hi_cardid,DELETE_BLACKLIST); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"InsertToBlkList err[%d]",ret); goto L_RETU; } //广播黑名单 AddXmlItemInt(tMesList.incontent, XML_KEY_CARDID,hi_cardid); AddXmlItemInt(tMesList.incontent, XML_KEY_ADDDELSIGN,DELETE_BLACKLIST); //增删标志 tMesList.funid = 930005; tMesList.pfunid = 930003; tMesList.max_send_cnt = 10; tMesList.level = MESLIST_PRIORITY_REALTIME; tMesList.msgtype = MESLIST_TYPE_ORDER; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } } // 准备数据插入交易流水表 ///////////////// ret = SaveCancelLossSerial(&tradeserial); if(ret) { *pRetCode = ret; goto L_RETU; } ret=GetCardMaxBlkVerNo(hi_cardid,volume); if(ret) { *pRetCode = ret; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_SSERIAL0,0); des2src(out_pack->sserial0,volume); //卡版本号 // writelog(LOG_DEBUG,"volume:[%s]",volume); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F846336(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int transflag=0; char logicdate[9]=""; char sysdate[9]=""; char systime[7]=""; int cardno=0; InAcc IA; char sMaxBalance[20]=""; double dMaxCardBalance = 0; double dMaxEACCBalance = 0; T_t_tif_tradeserial tradeserial; T_t_cif_customer tCustomer; T_t_pif_card tCard; T_t_aif_account tCardAccount; T_t_aif_account tEAcc; memset(&IA,0,sizeof(IA)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tCard,0,sizeof(tCard)); memset(&tCardAccount,0,sizeof(tCardAccount)); memset(&tEAcc,0,sizeof(tEAcc)); char cardphyid[9]=""; ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); transflag=rPack->lvol3; // char key[17]=""; // char pwd_plain[33]=""; // char pwd_crypt[65]=""; // strcpy(key,STATIC_SEED_KEY); // des2src(pwd_crypt,rPack->snote2); // EncodePwd(key,pwd_plain,pwd_crypt, 0); getsysdate(sysdate); getsystime(systime); cardno=rPack->lvol0; //卡号 //检查卡号 ret=DB_t_pif_card_read_by_card_id(cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) return E_CARDNO_NOT_EXIST; else return E_DB_CARD_R; } if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0) { if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) ret= E_CARDNO_LOGOUT; else if('3'==tCard.state_id[CARDSTAT_TYPE_REG]) ret = E_CARD_CHANGE; else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE) ret=E_CARDNO_LOST; else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE) ret=E_CARDNO_FREEZE; else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE) ret=E_CARDNO_WFAIL; return ret; } //比较卡物理ID是否相同 if(strcmp(tCard.physical_no,rPack->sstation0)!=0) { writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.physical_no,rPack->sstation0); return E_CARD_PHYNO_DIFFER; } //检查卡的有效期 if(strncmp(tCard.end_time,sysdate,6)<=0) return E_CARD_EXPIRE; //检查卡对应的账户 ret = DB_t_aif_account_read_by_card_id_and_purse_id(cardno, PURSE_NO_ONE,&tCardAccount); if (ret) { if(DB_NOTFOUND==ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_R; } if(tCardAccount.current_state!=1) return E_ACTNO_LOGOUT; //检查客户表,电子钱包是否开通 ret = DB_t_cif_customer_read_by_cut_id(tCardAccount.customer_id, &tCustomer); if(ret) { if(DB_NOTFOUND==ret) return E_CUSTOMER_NOT_EXIST; else return E_DB_CUSTOMER_R; } if(tCustomer.cut_state==CUSTSTAT_LOGOUT) return E_CUSTOMER_LOGOUT; if(tCustomer.eaccflag[0]=='0') return E_EACCNO_LOGOUT; //检查电子账户 ret=DB_t_aif_account_read_by_customer_id_and_act_type(tCustomer.cut_id, ACCTYPE_PEREACC, &tEAcc); if (ret) { if(DB_NOTFOUND==ret) return E_ACTNO_NOT_EXIST; else return E_DB_ACCOUNT_R; } if(tEAcc.current_state!=1) return E_ACTNO_LOGOUT; tradeserial.trade_fee = rPack->damt0; //充值金额 char inpwd_crypt[65]=""; char seedkey[33]=""; char inpwd_plain[65]=""; char dbpwd_plain[65]=""; if(transflag) //电子钱包到卡转帐 { tradeserial.serial_type = TXCODE_EACC2CARD; ret=GetParameter(2006,seedkey); if(ret) return ret; des2src(inpwd_crypt,rPack->snote2); if(!strlen(inpwd_crypt)) return E_INPUTNULL_PWD; ret=decrypt_elec_card_pwd(0,seedkey,inpwd_crypt,inpwd_plain); if(ret) return E_EACCPWD; ret=decrypt_elec_card_pwd(0,seedkey,tEAcc.password,dbpwd_plain); if(ret) return E_PWD_DECRYPT; if(strcmp(inpwd_plain,dbpwd_plain)!=0) return E_EACCPWD; if(tEAcc.stoppayflag[0] == '1') return E_EACC_STOPPAY; if(amtcmp(tEAcc.cur_freebala , rPack->damt0) <0) //金额不足 return E_EACC_BALANCE_SHORTAGE; ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxBalance); if(ret) return ret; dMaxCardBalance=atof(sMaxBalance); if(amtcmp(tCardAccount.cur_bala+tradeserial.trade_fee,dMaxCardBalance)>0) return E_AMT_EXCEED_MAX; // tradeserial.in_balance=rPack->damt1; //卡上余额 // tradeserial.trade_count=rPack->lvol6+1; //交易次数 } else { tradeserial.serial_type = TXCODE_CARD2EACC; strcpy(seedkey,STATIC_SEED_KEY); des2src(inpwd_plain,rPack->scust_limit2); EncodePwd(seedkey,inpwd_plain,inpwd_crypt,0); if(strcmp(tCardAccount.password,inpwd_crypt)!=0) return E_CARD_PWD_DIFFER; if(amtcmp(tCardAccount.cur_freebala , rPack->damt0) <0) //金额不足 return E_EACC_BALANCE_SHORTAGE; ret=GetParameter(GLOBE_MAXEACCBALANCE,sMaxBalance); if(ret) return ret; dMaxEACCBalance=atof(sMaxBalance); if(amtcmp(tEAcc.cur_bala+tradeserial.trade_fee,dMaxEACCBalance)>0) return E_AMT_EXCEED_MAX; // tradeserial.in_balance=tEAcc.cur_freebala; // tradeserial.trade_count=tEAcc.consume_count+1; //交易次数 } ret=GetLogicDate(logicdate); //业务日期 if(ret) return ret; double dSerialNo = 0; ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得最大流水号 if(ret) { writelog(LOG_ERR," getNewUniqNo ERRCODE = [%d]",ret); return ret; } tradeserial.serial_no = D2I(dSerialNo); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 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); //处理时间 des2src(tradeserial.oper_code, rPack->sname); tradeserial.customer_id = tCustomer.cut_id; tradeserial.sys_id = 0; //外部系统标识 tradeserial.in_balance=rPack->lvol7/100.0; tradeserial.trade_count=rPack->lvol6+1; //交易次数 des2src(IA.sArrInActno[0],tCardAccount.account_id); //卡帐户 des2src(IA.sArrInActno[5],tEAcc.account_id); //电子钱包帐户 IA.iCardNo=tEAcc.card_id; IA.dArrInAmt[0]=tradeserial.trade_fee; ret=process(&IA,&tradeserial); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); return ret; } if(TXCODE_CARD2EACC==tradeserial.serial_type) sprintf(outPack->vsmess,"卡转电子钱包:转帐前卡余额%.2lf元,转账金额%.2lf,当前卡余额%.2lf元",tradeserial.in_balance,tradeserial.trade_fee,tradeserial.out_balance); else sprintf(outPack->vsmess,"电子钱包转卡:转帐前卡余额%.2lf元,转账金额%.2lf,当前卡余额%.2lf元",tradeserial.in_balance,tradeserial.trade_fee,tradeserial.out_balance); writelog(LOG_DEBUG,outPack->vsmess); ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) return E_DB_TRADESERIAL_E; else return E_DB_TRADESERIAL_I; } if(amtcmp(tradeserial.out_balance,0)<0) return E_ENTER_ACCOUNT; SetCol(handle,F_DAMT2,F_LSERIAL1,F_VSMESS,0); outPack->damt2=tradeserial.out_balance; //出卡值 outPack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,outPack,pRetCode,szMsg); return 0; }
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[41]=""; 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; }
static mlib_status mlib_ImageConv1xN(mlib_image *dst, const mlib_image *src, const mlib_d64 *k, mlib_s32 n, mlib_s32 dn, mlib_s32 cmask) { FTYPE buff[BUFF_SIZE]; mlib_s32 off, kh; mlib_s32 d0, d1; const FTYPE *pk; FTYPE k0, k1, k2, k3; FTYPE p0, p1, p2, p3, p4; DEF_VARS(DTYPE); DTYPE *sl_c, *dl_c, *sl0; mlib_s32 l, hsize, max_hsize; GET_SRC_DST_PARAMETERS(DTYPE); hgt -= (n - 1); adr_dst += dn*dll; max_hsize = (CACHE_SIZE/sizeof(DTYPE))/sll; if (!max_hsize) max_hsize = 1; if (max_hsize > BUFF_SIZE) { pbuff = mlib_malloc(sizeof(FTYPE)*max_hsize); } chan1 = nchannel; sl_c = adr_src; dl_c = adr_dst; for (l = 0; l < hgt; l += hsize) { hsize = hgt - l; if (hsize > max_hsize) hsize = max_hsize; for (c = 0; c < nchannel; c++) { if (!(cmask & (1 << (chan1 - 1 - c)))) continue; sl = sl_c + c; dl = dl_c + c; #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (j = 0; j < hsize; j++) pbuff[j] = 0.0; for (i = 0; i < wid; i++) { sl0 = sl; for (off = 0; off < (n - 4); off += 4) { pk = k + off; sp = sl0; k0 = pk[0]; k1 = pk[1]; k2 = pk[2]; k3 = pk[3]; p2 = sp[0]; p3 = sp[sll]; p4 = sp[2*sll]; sp += 3*sll; #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (j = 0; j < hsize; j += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = sp[0]; p4 = sp[sll]; pbuff[j ] += p0*k0 + p1*k1 + p2*k2 + p3*k3; pbuff[j + 1] += p1*k0 + p2*k1 + p3*k2 + p4*k3; sp += 2*sll; } sl0 += 4*sll; } pk = k + off; sp = sl0; k0 = pk[0]; k1 = pk[1]; k2 = pk[2]; k3 = pk[3]; p2 = sp[0]; p3 = sp[sll]; p4 = sp[2*sll]; dp = dl; kh = n - off; if (kh == 4) { sp += 3*sll; #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (j = 0; j <= (hsize - 2); j += 2) { p0 = p2; p1 = p3; p2 = p4; p3 = sp[0]; p4 = sp[sll]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + p3*k3 + pbuff[j]); d1 = D2I(p1*k0 + p2*k1 + p3*k2 + p4*k3 + pbuff[j + 1]); dp[0 ] = FROM_S32(d0); dp[dll] = FROM_S32(d1); pbuff[j] = 0; pbuff[j + 1] = 0; sp += 2*sll; dp += 2*dll; } if (j < hsize) { p0 = p2; p1 = p3; p2 = p4; p3 = sp[0]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + p3*k3 + pbuff[j]); pbuff[j] = 0; dp[0] = FROM_S32(d0); } } else if (kh == 3) { sp += 2*sll; #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (j = 0; j <= (hsize - 2); j += 2) { p0 = p2; p1 = p3; p2 = sp[0]; p3 = sp[sll]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + pbuff[j]); d1 = D2I(p1*k0 + p2*k1 + p3*k2 + pbuff[j + 1]); dp[0 ] = FROM_S32(d0); dp[dll] = FROM_S32(d1); pbuff[j] = 0; pbuff[j + 1] = 0; sp += 2*sll; dp += 2*dll; } if (j < hsize) { p0 = p2; p1 = p3; p2 = sp[0]; d0 = D2I(p0*k0 + p1*k1 + p2*k2 + pbuff[j]); pbuff[j] = 0; dp[0] = FROM_S32(d0); } } else if (kh == 2) { sp += sll; #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (j = 0; j <= (hsize - 2); j += 2) { p0 = p2; p1 = sp[0]; p2 = sp[sll]; d0 = D2I(p0*k0 + p1*k1 + pbuff[j]); d1 = D2I(p1*k0 + p2*k1 + pbuff[j + 1]); dp[0 ] = FROM_S32(d0); dp[dll] = FROM_S32(d1); pbuff[j] = 0; pbuff[j + 1] = 0; sp += 2*sll; dp += 2*dll; } if (j < hsize) { p0 = p2; p1 = sp[0]; d0 = D2I(p0*k0 + p1*k1 + pbuff[j]); pbuff[j] = 0; dp[0] = FROM_S32(d0); } } else /* if (kh == 1) */ { #ifdef __SUNPRO_C #pragma pipeloop(0) #endif /* __SUNPRO_C */ for (j = 0; j < hsize; j++) { p0 = sp[0]; d0 = D2I(p0*k0 + pbuff[j]); dp[0] = FROM_S32(d0); pbuff[j] = 0; sp += sll; dp += dll; } } sl += chan1; dl += chan1; } } sl_c += max_hsize*sll; dl_c += max_hsize*dll; } if (pbuff != buff) mlib_free(pbuff); return MLIB_SUCCESS; }
ERL_NIF_TERM parse_buffer(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { Parser par; Parser* parser = ∥ ErlNifBinary buffer; if(!enif_inspect_binary(env, argv[0], &buffer)) return enif_make_badarg(env); if(!init_parser(parser, env, argv[0], &buffer, argv[1])) return enif_make_badarg(env); ERL_NIF_TERM reply = argv[2]; ERL_NIF_TERM return_value; parser->remaining_length = buffer.size; parser->pointer = buffer.data + parser->frame_start; while (parser->frame_start < parser->buffer_size) { parser->frame_size = D3I(parser->pointer); parser->pointer += 3; unsigned long seg_num = D1(parser->pointer); parser->pointer += 1; parser->remaining_length -= (parser->frame_size + 4); if (parser->remaining_length < 0) { return_value = enif_make_tuple3(env, parser->atoms->atom_incomplete, reply, enif_make_sub_binary(env, parser->raw, parser->frame_start, parser->buffer_size - parser->frame_start)); break; } if (*parser->pointer == MYSQL_RESP_EOF) { ERL_NIF_TERM remaining_buffer = enif_make_sub_binary(env, parser->raw, parser->frame_start + parser->frame_size + 4, parser->remaining_length); if (parser->frame_size == 5) { unsigned long server_status = D2I(parser->pointer + 3); return_value = enif_make_tuple5(env, parser->atoms->atom_eof, enif_make_uint(env, server_status), enif_make_uint(env, seg_num), reply, remaining_buffer); } else return_value = enif_make_tuple4(env, parser->atoms->atom_eof, enif_make_uint(env, seg_num), reply, remaining_buffer); break; } parser->frame_start += 4; ERL_NIF_TERM row = parse_line(parser); reply = enif_make_list_cell(env, row, reply); parser->frame_start += parser->frame_size; parser->pointer += parser->frame_size; } if (parser->frame_start >= parser->buffer_size) return_value = enif_make_tuple3(env, parser->atoms->atom_incomplete, reply, parser->atoms->atom_empty); destroy_parser(parser); return return_value; }
/** * \brief 处理网银转账入账业务 * \param in_pack 请求报文包 * \param out_pack 输出报文包 * \param online_tx 联机交易,当为1时,如果个人账户已注销,则不能交易, * 当为0时,如果个人账户已注销,则借记 现金,贷记 营业成本 */ int do_849009(ST_PACK *in_pack,char *szMsg,ST_PACK *out_pack,int online_tx) { int cust_id,card_id; int subsidy_no; int ret,count; char temp[64]; double max_subsidy_money = 0.0; double total_money,dSerial; T_t_tif_subsidy subsidy; T_t_tif_tradeserial tSerial; T_t_aif_account account; T_t_tif_meslist tMesList; InAcc IA; if(amtcmp(in_pack->damt0,0.0) <= 0) { writelog(LOG_DEBUG,"input money error!"); return E_INPUT_AMT; } memset(temp,0,sizeof temp); ret = GetParameter(GLOBAL_MAX_PER_SUBSIDY,temp); if(ret) { return ret; } max_subsidy_money = D4U5(atof(temp),2); // 流水号 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerial); if(ret) { return ret; } // 查询卡信息 ret = do_849008_query(in_pack,&cust_id,&card_id); if(ret) { writelog(LOG_DEBUG,"query customer information error!,ret[%d]",ret); return ret; } // 账户信息 memset(&account,0,sizeof account); ret = DB_t_aif_account_read_by_card_id_and_purse_id(card_id,in_pack->lvol3,&account); if(ret) { // 账户表无信息 if(DB_NOTFOUND == ret) return E_DB_ACCOUNT_N; else return E_DB_ACCOUNT_R; } // 生成流水记录 memset(&tSerial,0,sizeof tSerial); writelog(LOG_DEBUG,"cust_id[%d],Serial_no[%d]]",cust_id,in_pack->lvol2); ret = do_849008_query_serial(cust_id,in_pack->lvol2,&tSerial); if(ret) { return ret; } // 认为已经入账成功,直接返回结果 if(tSerial.serial_no > 0) { out_pack->lvol0 = tSerial.card_id; out_pack->lvol1 = tSerial.serial_no; out_pack->lvol2 = tSerial.customer_id; out_pack->damt0 = tSerial.trade_fee; return 0; } memset(&IA,0,sizeof IA); tSerial.serial_no = D2I(dSerial); tSerial.serial_type = TXCODE_NETFEE_TRANS; // 网银转账 tSerial.serial_state = SERISTAT_DEBT; des2src(tSerial.oper_code,in_pack->scust_no2); des2src(tSerial.operate_date,in_pack->sdate0); des2src(tSerial.operate_time,in_pack->stime0); GetLogicDate(tSerial.enteract_date); getsystime(tSerial.enteract_time); getsysdate(tSerial.collect_date); des2src(tSerial.collect_time,tSerial.enteract_time); tSerial.customer_id = cust_id; tSerial.card_id = card_id; tSerial.in_balance = 0.0; tSerial.out_balance = 0.0; tSerial.trade_fee = in_pack->damt0; tSerial.other_seri_no = in_pack->lvol2; // 银行端流水号 if(account.current_state >= ACCOUNTSTAT_LOGOUT) { // 个人账户已经注销 if(online_tx) return E_ACTNO_LOGOUT; // 借记 银行存款 贷记 营业成本 des2src(IA.sArrInActno[3],"1021"); IA.dArrInAmt[1] = tSerial.trade_fee; } else { // 个人账户号 des2src(IA.sArrInActno[0],account.account_id); IA.dArrInAmt[0] = tSerial.trade_fee; } IA.iFeeType=1; ret = process(&IA,&tSerial); if(ret) { writelog(LOG_ERR,"入账失败,cust_id[%d],card_id[%d],ret[%d]" ,cust_id,card_id,ret); return ret; } ret = DB_t_tif_tradeserial_add(&tSerial); if(ret) { writelog(LOG_ERR,"记录流水失败"); return E_DB_TRADESERIAL_I; } // 先入账 total_money = 0.0; count = 0; memset(&subsidy,0,sizeof subsidy); subsidy.cust_no = cust_id; getsysdatetime(subsidy.batch_no); des2src(subsidy.oper_code,tSerial.oper_code); strcpy(subsidy.summary,"网银转账"); strcpy(subsidy.expire_date,"20500101"); subsidy.bill_type = TYPE_CASH; subsidy.card_no = card_id; des2src(subsidy.tx_date,tSerial.operate_date); des2src(subsidy.tx_time,tSerial.operate_time); subsidy.status[0] = SUBSIDY_STAT_NORMAL; strcpy(subsidy.subsidytype,"1"); subsidy.amount = D4U5(in_pack->damt0 - total_money,2); if(amtcmp(subsidy.amount,0.0) <= 0) { // 剩余金额为 0, 不可能出现小于 0 // break; ret=E_MOBILE_TRANS_ZERO; return ret; } else if(amtcmp(subsidy.amount,max_subsidy_money) > 0.0) { // 单笔金额不能大于最大值 //subsidy.amount = max_subsidy_money; ret=E_MOBILE_TRANS_MAX; return ret; } total_money = D4U5(total_money+subsidy.amount,2); ret = calc_card_max_subsidy_no(cust_id,card_id,&subsidy_no); if(ret) { writelog(LOG_DEBUG,"cannot calculate max subsidy NO,cust[%d],card[%d],ret[%d]", cust_id,card_id,ret); return ret; } subsidy.subsidy_no = subsidy_no; ret = DB_t_tif_subsidy_add(&subsidy); if(ret) { // 记录信息失败 if(DB_REPEAT == ret) return E_DB_SUBSIDY_E; else return E_DB_SUBSIDY_I; } out_pack->lvol0 = card_id; out_pack->lvol1 = tSerial.serial_no; out_pack->lvol2 = tSerial.customer_id; out_pack->damt0 = tSerial.trade_fee; return 0; }
ERL_NIF_TERM parse_line(Parser* parser) { unsigned long idx = parser->frame_start; unsigned col = 0; ERL_NIF_TERM reply[parser->table_width]; while(col < parser->table_width) { unsigned char size_length = (parser->buffer[idx] <= MYSQL_LIMIT_BYTE) ? (1) : (parser->buffer[idx] - MYSQL_LIMIT_BYTE); size_length *= (size_length == 4) ? (2) : (1); unsigned long long content_length = 0; if (parser->buffer[idx] != MYSQL_NULL_RESULT) { switch (size_length) { case 1: content_length = D1(parser->buffer + idx); break; case 2: content_length = D2I(parser->buffer + idx + 1); size_length++; break; case 3: content_length = D3I(parser->buffer + idx + 1); size_length++; break; case 8: content_length = D8I(parser->buffer + idx + 1); size_length++; break; } } else content_length = 0; unsigned char *new_val = parser->buffer + idx + size_length; MYSQL_TIME time_; if (content_length == 0) reply[col] = parser->atoms->atom_undefined; else if (parser->columns[col] == MYSQL_TYPE_BIT || parser->columns[col] == MYSQL_TYPE_TINY_BLOB || parser->columns[col] == MYSQL_TYPE_MEDIUM_BLOB || parser->columns[col] == MYSQL_TYPE_LONG_BLOB || parser->columns[col] == MYSQL_TYPE_BLOB || parser->columns[col] == MYSQL_TYPE_VAR_STRING || parser->columns[col] == MYSQL_TYPE_STRING) reply[col] = enif_make_sub_binary(parser->env, parser->raw, idx + size_length, size_length + content_length - 1); else if (parser->columns[col] == MYSQL_TYPE_TINY || parser->columns[col] == MYSQL_TYPE_SHORT || parser->columns[col] == MYSQL_TYPE_LONG || parser->columns[col] == MYSQL_TYPE_LONGLONG || parser->columns[col] == MYSQL_TYPE_INT24 || parser->columns[col] == MYSQL_TYPE_YEAR) reply[col] = enif_make_int(parser->env, atoi((char *) new_val)); else if (parser->columns[col] == MYSQL_TYPE_DECIMAL || parser->columns[col] == MYSQL_TYPE_NEWDECIMAL || parser->columns[col] == MYSQL_TYPE_FLOAT || parser->columns[col] == MYSQL_TYPE_DOUBLE) reply[col] = enif_make_double(parser->env, strtod((const char *) new_val, NULL)); else if (parser->columns[col] == MYSQL_TYPE_DATE) { sscanf((const char*) new_val, "%d-%d-%d", &time_.year, &time_.month, &time_.day); reply[col] = enif_make_tuple2(parser->env, parser->atoms->atom_date, enif_make_tuple3(parser->env, enif_make_int(parser->env, time_.year), enif_make_int(parser->env, time_.month), enif_make_int(parser->env, time_.day)) ); } else if (parser->columns[col] == MYSQL_TYPE_TIME) { sscanf((const char*) new_val, "%d:%d:%d", &time_.hour, &time_.minute, &time_.second); reply[col] = enif_make_tuple2(parser->env, parser->atoms->atom_time, enif_make_tuple3(parser->env, enif_make_int(parser->env, time_.hour), enif_make_int(parser->env, time_.minute), enif_make_int(parser->env, time_.second)) ); } else if (parser->columns[col] == MYSQL_TYPE_TIMESTAMP || parser->columns[col] == MYSQL_TYPE_DATETIME) { sscanf((const char*) new_val, "%d-%d-%d %d:%d:%d", &time_.year, &time_.month, &time_.day, &time_.hour, &time_.minute, &time_.second); reply[col] = enif_make_tuple2(parser->env, parser->atoms->atom_datetime, enif_make_tuple2(parser->env, enif_make_tuple3(parser->env, enif_make_int(parser->env, time_.year), enif_make_int(parser->env, time_.month), enif_make_int(parser->env, time_.day) ), enif_make_tuple3(parser->env, enif_make_int(parser->env, time_.hour), enif_make_int(parser->env, time_.minute), enif_make_int(parser->env, time_.second) ) ) ); } else if (parser->columns[col] == MYSQL_TYPE_FIELD_EXTRA) { ERL_NIF_TERM default_content; if (content_length > 12) default_content = enif_make_sub_binary(parser->env, parser->raw, idx + size_length + 12, size_length + content_length - 13); else default_content = parser->atoms->atom_undefined; reply[col] = enif_make_tuple6(parser->env, enif_make_int(parser->env, D2I(new_val)), enif_make_int(parser->env, D4I(new_val + 2)), enif_make_int(parser->env, D1(new_val + 6)), enif_make_int(parser->env, D2I(new_val + 7)), enif_make_int(parser->env, D1(new_val + 11)), default_content ); } col++; idx += content_length + size_length; } return enif_make_list_from_array(parser->env, reply, parser->table_width); }
int F847132(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int i=0; int iTotalCnt=0; double dTotalAmt=0.0; double dSerialNo = 0; char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; char sMsg[256]=""; T_t_tif_tradeserial tradeserial; T_t_tif_savdtl tSavdtl; T_t_tif_subsidy tSubsidy; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); T_t_tif_meslist tMesList; T_t_pif_device t_device; T_t_pif_syskey tSyskey; memset(&t_device,0,sizeof t_device); memset(&tMesList,0,sizeof tMesList); memset(&tSavdtl,0,sizeof(tSavdtl)); memset(&tSubsidy,0,sizeof(tSubsidy)); memset(&tSyskey,0,sizeof tSyskey); memset(&tradeserial,0,sizeof(tradeserial)); memset(&IA,0,sizeof(IA)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSMESS,0); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } if(strlen(rPack->scust_limit)<1) { *pRetCode=E_INPUT_BATCH_NO; goto L_RETU; } if(strlen(rPack->scust_no)<1) { *pRetCode=E_INPUT_OPER_NULL; goto L_RETU; } //允许补助负金额 if(amtcmp(rPack->damt0,0)==0) { *pRetCode=E_INPUT_AMT; goto L_RETU; } des2src(tSubsidy.summary,rPack->semail); //补助摘要 if(strlen(rPack->semail)<1) { *pRetCode=E_INPUT_SUMMARY; goto L_RETU; } des2src(tSubsidy.batch_no,rPack->scust_limit); tSubsidy.bill_type=rPack->lvol2; //票据类型 des2src(tSubsidy.bill_no,rPack->scust_auth2); //票据号码 tSubsidy.amount=rPack->damt0; //补助金额 des2src(tSubsidy.subsidytype,rPack->smain_flag);//补助标志(0增值1减值) des2src(tSubsidy.subsidytype,"1"); //补助标志(0增值1减值) des2src(tSubsidy.broker_id,rPack->sname); //经办人身份证号 des2src(tSubsidy.broker_name,rPack->semail2); //经办人姓名 IA.dArrInAmt[0]=tradeserial.trade_fee; switch(tSubsidy.bill_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; } /* ret=get_batch_no_by_subsidy_no(tSubsidy.subsidy_no,tSubsidy.batch_no); if(ret) { *pRetCode = E_DB_SUBSIDYTMP_R; goto L_RETU; } */ // 下发补助时才生成批次号 /* ret=judge_with_max_subsidy_no_within_new(tSubsidy.subsidy_no); if(ret) { *pRetCode = E_SUBSIDY_DOWN_ERROR; goto L_RETU; } */ ret=stat_subsidy_amount_by_batch_no(tSubsidy.batch_no, &iTotalCnt,&dTotalAmt); if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } if(iTotalCnt!=rPack->lvol3) { strcpy(szMsg,"补助人数与导入的数据不符"); *pRetCode=E_INPUT_DATA_INVAILD; goto L_RETU; } if(amtcmp(dTotalAmt,rPack->damt0)!=0) { strcpy(szMsg,"补助总金额与导入的补助数据不符"); *pRetCode=E_INPUT_DATA_INVAILD; goto L_RETU; } writelog(LOG_DEBUG,"download subsidy batch_no : %s",tSubsidy.batch_no); des2src(tSubsidy.tx_date,sysdate); des2src(tSubsidy.tx_time,systime); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(dSerialNo); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 if(amtcmp(dTotalAmt,0.0)>0) tradeserial.serial_type = TXCODE_SET_SUBSIDY; else tradeserial.serial_type = TXCODE_DESUBSIDY_DOWN; 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; //采集设备标识 des2src(tradeserial.oper_code , rPack->scust_no); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 // 设置发生金额 tradeserial.trade_fee = dTotalAmt; switch(tSubsidy.bill_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,tSubsidy.bill_no); //票据号码 if(strlen(tSavdtl.bill_no)<1) { *pRetCode=E_INPUT_BILLNO; goto L_RETU; } tSavdtl.card_no=0; //卡号 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=tSubsidy.bill_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_INPUT_DEPOSIT_TYPE; goto L_RETU; } IA.iFeeType=1; //默认值 //支持负金额扣款 if(tradeserial.trade_fee<0) tradeserial.trade_fee=-tradeserial.trade_fee; 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,&tSubsidy); if(ret) { writelog(LOG_ERR,"process ret[%d]",ret); *pRetCode=ret; goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d ",IA.iSerialNo); // writelog(LOG_DEBUG,"out tx type count %d",IA.iOutTxTypeCnt); /* for(i=1;i<=IA.iOutTxTypeCnt;i++) { if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } */ sprintf(sMsg,",共%d笔",iTotalCnt); strcat(out_pack->vsmess,sMsg); // 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; } // 广播下载补助名单任务 memset(&tMesList,0,sizeof tMesList); tMesList.funid=930077; tMesList.level = MESLIST_PRIORITY_REALTIME; tMesList.msgtype = MESLIST_TYPE_NORMAL; tMesList.max_send_cnt = 5; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=E_DB_MESLIST_I; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); return ret; } ////////////////////////新增 ret=DB_t_pif_device_open_select_by_c5_and_devtype_and_phytype("5301",1001); if(ret) { writelog(LOG_ERR,"DB_t_pif_device_open_select_by_c5_and_devtype_and_phytype error,ret=[%d]",ret); *pRetCode = E_DB_DEVICE_R; goto L_RETU; } while(1) { // 初始化宿主变量 ret=DB_t_pif_device_fetch_select_by_c5(&t_device); if (ret) { DB_t_pif_device_close_select_by_c5(); db_chk_err(__FILE__,__LINE__,&sqlca); if(DB_NOTFOUND==ret) { break; } else { *pRetCode=E_DB_DEVICE_R; writelog(LOG_ERR,"DB_t_pif_device_fetch_select_by_c5 err [%d]",ret); goto L_RETU; } } if(t_device.state_id == DEVISTAT_LOGOUT) //设备已经注销 continue; tMesList.devid = t_device.device_id; tMesList.device_id= t_device.subsystem_id; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=E_DB_MESLIST_I; DB_t_pif_device_close_select_by_c5(); writelog(LOG_ERR,"AddMsgLst err[%d]",ret); return ret; } } // 锁住批次号 ret = DB_t_pif_syskey_read_lock_by_cur_and_key_code(KEYTYPE_TIF_SUBSIDY_NO,&tSyskey); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_SYSKEY_N; else *pRetCode = E_DB_SYSKEY_R; goto L_RETU; } ret = calc_import_max_subsidy_no(tSubsidy.batch_no,tSubsidy.oper_code,&tSubsidy.subsidy_no); if(ret) { DB_t_tif_subsidy_close_select_by_c4(); return ret; } writelog(LOG_DEBUG,"download subsidy no[%d]",tSubsidy.subsidy_no); ret=update_subsidy_info_by_batch_no(&tSubsidy); if(ret) { *pRetCode = ret; DB_t_pif_syskey_free_lock_cur(); writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } // 释放批次号 DB_t_pif_syskey_free_lock_cur(); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
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; 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; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847302(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret = 0; T_t_card tCard; T_t_tif_tradeserial tTradeSerial, tPacketSerial; T_t_tif_writefailed tWriteFailed; char logicdate[11] = ""; double dUniqNo = 0; memset(&tCard, 0, sizeof tCard); memset(&tTradeSerial, 0, sizeof tTradeSerial); memset(&tPacketSerial, 0, sizeof tPacketSerial); memset(&tWriteFailed, 0, sizeof tWriteFailed); if (rPack->lvol3 != 0 && rPack->lvol3 != 1) { writelog(LOG_DEBUG,"输入标志错误[%d]",rPack->lvol3); *pRetCode = E_INPUT_ERROR; goto L_RETU; } ret = DB_t_tif_tradeserial_read_by_serial_no(rPack->lvol1,&tTradeSerial); //消费流水号 if (ret) { writelog(LOG_DEBUG,"输入号不存在消费流水号[%d]",rPack->lvol1); if (DB_NOTFOUND == ret) { *pRetCode = E_DB_TRADESERIAL_N; } else { *pRetCode = E_DB_TRADESERIAL_R; } goto L_RETU; } ret = DB_t_card_read_lock_by_cur_and_cardno(tTradeSerial.cardno,&tCard); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_DB_CARD_N; } else { *pRetCode = E_DB_CARD_R; } goto L_RETU; } ret = DB_t_tif_tradeserial_read_by_serial_no(rPack->lvol2,&tPacketSerial); //充值流水号 if (ret) { writelog(LOG_DEBUG,"输入号不存在充值流水号[%d]",rPack->lvol2); if (DB_NOTFOUND == ret) { *pRetCode = E_DB_TRADESERIAL_N; } else { *pRetCode = E_DB_TRADESERIAL_R; } goto L_RETU; } GetLogicDate(logicdate); tWriteFailed.cardno = tCard.cardno; des2src(tWriteFailed.tx_date,logicdate); writelog(LOG_DEBUG,"大钱包交易金额[%f]",tTradeSerial.trade_fee); // 大钱包写卡失败 if (0 == rPack->lvol3) { // 大钱包写卡失败 ret = getNewUniqNo(KEYTYPE_WRITEFAILED, &dUniqNo); //获得写卡失败表最大ID号 if (ret) { writelog(LOG_ERR,"ret[%d]",ret); *pRetCode = ret; goto L_RETU; } tWriteFailed.id = D2I(dUniqNo); tWriteFailed.serial_no = tTradeSerial.serial_no; tWriteFailed.serial_type = tTradeSerial.serial_type; tWriteFailed.purese_no = PURSE_NO_ONE; tWriteFailed.deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y; tWriteFailed.deal_bala = tTradeSerial.trade_fee; des2src(tWriteFailed.comments, "大钱包写卡失败"); ret = DB_t_tif_writefailed_add(&tWriteFailed); if (ret) { *pRetCode = E_DB_WRITEFAILED_I; goto L_RETU; } } tCard.cardattr[CARDSTAT_TYPE_WFAIL] = STATE_TRUE; ret = DB_t_card_update_lock_by_cur(&tCard); if (ret) { *pRetCode = E_DB_CARD_U; goto L_RETU; } DB_t_card_free_lock_by_cur(); ret = getNewUniqNo(KEYTYPE_WRITEFAILED, &dUniqNo); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); *pRetCode = ret; goto L_RETU; } writelog(LOG_DEBUG,"小钱包交易金额[%f]",tPacketSerial.trade_fee); tWriteFailed.id = D2I(dUniqNo); tWriteFailed.serial_no = tPacketSerial.serial_no; tWriteFailed.serial_type = tPacketSerial.serial_type; tWriteFailed.deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y; tWriteFailed.purese_no = PURSE_NO_TWO; tWriteFailed.deal_bala = tPacketSerial.trade_fee; des2src(tWriteFailed.comments, "小钱包充值失败"); ret = DB_t_tif_writefailed_add(&tWriteFailed); if (ret) { *pRetCode = E_DB_WRITEFAILED_I; goto L_RETU; } return 0; L_RETU: return -1; }
int F847301(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { T_t_tif_tradeserial tSerial, tPacketSerial; T_t_aif_account tAccount; T_t_card tCard; T_t_customer tCustomer; T_t_tif_writefailed tWriteFailed; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); int ret = 0; int TxTypeCount = 0; int hi_cardid = 0; //交易卡号 char buf[100 + 1] = ""; char sysdate[11] = ""; char systime[7] = ""; char logicdate[11] = ""; char sMsg[128] = ""; // char temp_account_id[16 + 1] = "2081"; //个人临时帐户 double dUniqNo = 0; //最大流水号 double cardbefbal = 0; double small_packet_balance = 0; //小钱包中的余额 double max_balance = 0; //小钱包余额上限 double transfer_price = 0; //转入金额 memset(&tAccount, 0, sizeof tAccount); memset(&tCard, 0, sizeof tCard); memset(&tCustomer, 0, sizeof tCustomer); memset(&IA, 0, sizeof IA); memset(&tPacketSerial, 0, sizeof tPacketSerial); memset(&tWriteFailed, 0, sizeof tWriteFailed); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack, 0, 1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_DAMT0,F_DAMT2,F_VSMESS,F_LVOL9,F_LVOL5,0); hi_cardid = rPack->lvol0; if (hi_cardid <= 0) { *pRetCode = E_INPUT_CARDNO; goto L_RETU; } //判断小钱包中的余额 small_packet_balance = rPack->damt3; //读取小钱包余额上限 ret = GetSysParaVal(GLB_PACKET_LIMITS,buf); if (ret) { *pRetCode = ret; goto L_RETU; } max_balance = atof(buf); if (amtcmp(max_balance,0) <= 0) { *pRetCode = E_GLOBAL_PARAM_ERROR; goto L_RETU; } //判断充值到小钱包的金额 transfer_price = rPack->damt4; //钱包转入金额 writelog(LOG_DEBUG,"tranfser_price=[%d]",transfer_price); writelog(LOG_DEBUG,"small_packet_balance=[%d]",small_packet_balance); if (amtcmp(transfer_price, 0) <= 0 || amtcmp(small_packet_balance, 0) < 0) { *pRetCode = E_INPUT_DATA_INVAILD; goto L_RETU; } if (amtcmp(small_packet_balance + transfer_price,max_balance) > 0) { sprintf(sMsg, "钱包余额上限是%f吨", max_balance); *pRetCode = E_PACKET_LIMIT_EXCEED; goto L_RETU; } cardbefbal = rPack->damt1; if (amtcmp(cardbefbal,0.0) < 0) { *pRetCode = E_BALANCE_SHORTAGE; goto L_RETU; } ret = DB_t_card_read_by_cardno(hi_cardid,&tCard); if(ret) { if(DB_NOTFOUND == ret) { *pRetCode = E_DB_CARD_N; } else { *pRetCode = E_DB_CARD_R; } goto L_RETU; } //判断卡密码是否正确 /* if (CheckUserPswd(rPack->semp_pwd,tCard.password)) { writelog(LOG_ERR,"Card password error"); *pRetCode = E_TRANS_SCHCARD_PWDERR; goto L_RETU; } */ if (strncmp(tCard.cardstatus, TYPE_YES, 1) != 0) { writelog(LOG_ERR,"card_state=[%s]",tCard.cardstatus); *pRetCode = E_TRANS_SCHACC_DESTORY; goto L_RETU; } if (STATE_TRUE == tCard.cardstatus[CARDSTAT_TYPE_LOST]) { writelog(LOG_ERR,"card_state=[%s]",tCard.cardstatus); *pRetCode = E_TRANS_SCHCARD_LOSTING; goto L_RETU; } if (STATE_TRUE == tCard.cardstatus[CARDSTAT_TYPE_FREEZE]) { writelog(LOG_ERR,"card_state=[%s]",tCard.cardstatus); *pRetCode = E_TRANS_SCHCARD_FREEZE; goto L_RETU; } if (STATE_TRUE == tCard.cardstatus[CARDSTAT_TYPE_WFAIL]) { *pRetCode = E_CARDNO_WFAIL; goto L_RETU; } ret = DB_t_customer_read_by_custid(tCard.custid,&tCustomer); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_DB_CUSTOMER_N; } else { *pRetCode = E_DB_CUSTOMER_R; } goto L_RETU; } //读取个人帐户 ret = DB_t_aif_account_read_by_cardno_and_purseno(tCard.cardno,PURSE_NO_ONE,&tAccount); if (ret) { if (DB_NOTFOUND == ret) { *pRetCode = E_DB_ACCOUNT_N; } else { *pRetCode = E_DB_ACCOUNT_R; } goto L_RETU; } //个人临时帐户填死掉了, 不需要查询 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqNo); // 获得最大流水号 if (ret) { writelog(LOG_ERR,"ret[%d]",ret); *pRetCode = ret; goto L_RETU; } getsysdate(sysdate); getsystime(systime); GetLogicDate(logicdate); memset(&tSerial, 0, sizeof tSerial); tSerial.serial_no = D2I(dUniqNo); tSerial.other_seri_no = 0; tSerial.serial_state = SERISTAT_DEBT; //流水状态 tSerial.serial_type = TXCODE_CONSUME; //交易类型 des2src(tSerial.operate_date,sysdate); //发生日期 des2src(tSerial.operate_time,systime); //发生时间 des2src(tSerial.collect_date,sysdate); //采集日期 des2src(tSerial.collect_time,systime); //采集时间 des2src(tSerial.enteract_date,logicdate); //处理日期 des2src(tSerial.enteract_time,systime); //处理时间 // tSerial.maindeviceid = rPack->lvol3; //上传工作站标识 tSerial.deviceid = 0; //采集设备标识 tSerial.cardno = hi_cardid; //交易卡号 des2src(tSerial.showid,tCard.showid); //显示卡号 tSerial.purseno = PURSE_NO_ONE; //钱包号 tSerial.custid = tCard.custid; //客户号 des2src(tSerial.opercode, rPack->scust_no); //操作员代码 tSerial.sysid = 0; tSerial.trade_count = rPack->lvol4 + 1; //卡交易次数 tSerial.trade_fee = transfer_price; //转钱金额 tSerial.cardbefbal = cardbefbal; //入卡值 writelog(LOG_DEBUG,"水控转账入卡值[%.2lf]",cardbefbal); des2src(IA.sArrInActno[0],tAccount.account_id); //个人帐户 // des2src(IA.sArrInActno[1],temp_account_id); //个人临时帐户 IA.dArrInAmt[0] = tSerial.trade_fee; //交易金额 IA.iCardNo = tCard.cardno; //交易卡号 IA.iFeeType = tCustomer.feetype; //客户收费类型 //调用入帐子模块 ret = process(&IA,&tSerial); 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(TxTypeCount = 1; TxTypeCount <= IA.iOutTxTypeCnt; TxTypeCount++) { switch(IA.iArrOutTxType[TxTypeCount]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tSerial.depositfee = IA.dArrOutAmt[TxTypeCount]; 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: tSerial.managefee = IA.dArrOutAmt[TxTypeCount]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: tSerial.in_fee = IA.dArrOutAmt[TxTypeCount]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: tSerial.cost_fee = IA.dArrOutAmt[TxTypeCount]; break; default: break; } if (amtcmp(IA.dArrOutAmt[TxTypeCount], 0) != 0) { sprintf(sMsg,"%s:%.2lf元 ", IA.sArrOutTxName[TxTypeCount], IA.dArrOutAmt[TxTypeCount]); strcat(out_pack->vsmess, sMsg); } } sprintf(sMsg, "卡当前余额:%.2lf元", tSerial.cardaftbal); strcat(out_pack->vsmess, sMsg); writelog(LOG_DEBUG,out_pack->vsmess); //插入交易流水表 ret = DB_t_tif_tradeserial_add(&tSerial); 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; } //保存充值流水 memcpy(&tPacketSerial, &tSerial, sizeof tPacketSerial); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqNo); //获得最大流水号 if(ret) { writelog(LOG_ERR,"ret [%d]",ret); *pRetCode = ret; goto L_RETU; } tPacketSerial.serial_no = D2I(dUniqNo); tPacketSerial.serial_state = SERISTAT_NONEEDDEBT; tPacketSerial.serial_type = TXCODE_SAVING_SMALL_PACKET; tPacketSerial.purseno = PURSE_NO_TWO; tPacketSerial.trade_count = rPack->lvol5 + 1; des2src(tPacketSerial.opercode, rPack->scust_no); tPacketSerial.cardbefbal = small_packet_balance; tPacketSerial.trade_fee = transfer_price; tPacketSerial.cardaftbal = small_packet_balance + tPacketSerial.trade_fee; ret = DB_t_tif_tradeserial_add(&tPacketSerial); if(ret) { if(DB_REPEAT == ret) { *pRetCode = E_DB_TRADESERIAL_E; } else { *pRetCode = E_DB_TRADESERIAL_I; } goto L_RETU; } out_pack->lvol0 = tSerial.serial_no; out_pack->lvol1 = tPacketSerial.serial_no; out_pack->damt2 = tPacketSerial.cardaftbal; out_pack->damt0 = tSerial.cardaftbal; out_pack->lvol9 = tSerial.trade_count; out_pack->lvol5 = tPacketSerial.trade_count; writelog(LOG_DEBUG,"水控钱包金额[%.2lf], 出卡值[%.2lf]",out_pack->damt2,out_pack->damt0); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }