static int check(T_t_door_txdtl *p) { int ret=0; if(strlen(p->crc)==0) { return E_999_CRC; //上传流水CRC校验错误 } ret=IsInvalidDateTime(p->tx_date,"YYYYMMDD"); if(ret) { return E_999_DATE; //上传流水交易日期有误 } ret=IsInvalidDateTime(p->tx_time,"HHMMSS"); if(ret) { return E_999_TIME; //上传流水交易时间有误 } /* if((p->tx_mark!=0X99)&&(p->tx_mark!=0xFE) ) { return p->tx_mark+E_999_0X00; //把返回码置为交易标记 } */ return 0; }
static int check(T_t_tif_rcvdtl *p) { int ret=0; if(strlen(p->crc)==0) { return E_999_CRC; //上传流水CRC校验错误 } ret=IsInvalidDateTime(p->tx_date,"YYYYMMDD"); if(ret) { return E_999_DATE; //上传流水交易日期有误 } ret=IsInvalidDateTime(p->tx_time,"HHMMSS"); if(ret) { return E_999_TIME; //上传流水交易时间有误 } if((p->tx_mark!=0X99)&&(p->tx_mark!=0xFE) ) { return p->tx_mark+E_999_0X00; //把返回码置为交易标记 } if(p->in_bala- p->out_bala!=p->amount) { return E_999_CARD_BALANCE; //上传流水出入卡余额有误 } if(0X99==p->tx_mark) { if(p->amount<=0) { return E_999_AMT; //上传流水交易发生金额有误 } /* if(p->amount-p->manage_fee<0) { return E_999_AMT; //上传流水交易发生金额有误 } */ } else { //冲正交易,发生额为负数 if(p->amount>=0) { return E_999_AMT; //上传流水交易发生金额有误 } /* if(p->amount-p->manage_fee>0) { return E_999_AMT; //上传流水交易发生金额有误 } */ } return 0; }
static int check(T_t_tif_rcvdtl *p) { int ret=0; if(strlen(p->crc)==0) { return E_999_CRC; //上传流水CRC校验错误 } ret=IsInvalidDateTime(p->tx_date,"YYYYMMDD"); if(ret) { return E_999_DATE; //上传流水交易日期有误 } ret=IsInvalidDateTime(p->tx_time,"HHMMSS"); if(ret) { return E_999_TIME; //上传流水交易时间有误 } if((p->tx_mark!=0XFA)&&(p->tx_mark!=0xFE)) { return p->tx_mark+E_999_0X00; //把返回码置为交易标记 } if(0XFA==p->tx_mark) { if(p->out_bala<=p->in_bala) { return E_999_CARD_BALANCE; //上传流水出入卡余额有误 } if(p->amount<=0) { return E_999_AMT; //上传流水交易发生金额有误 } } else { if(p->out_bala>=p->in_bala) { return E_999_CARD_BALANCE; //上传流水出入卡余额有误 } if(p->amount>=0) { return E_999_AMT; //上传流水交易发生金额有误 } } return 0; }
static int check(T_t_posdtl *p) { int ret = 0; if (0 == strlen(p->crc)) return E_999_CRC; //上传流水CRC校验错误 ret = IsInvalidDateTime(p->transdate, "YYYYMMDD"); if (ret) return E_999_DATE; //上传流水交易日期有误 ret = IsInvalidDateTime(p->transtime, "HHMMSS"); if (ret) return E_999_TIME; //上传流水交易时间有误 if ((p->transmark != 0x99) && (p->transmark != 0xFE) && (p->transmark != 0x90)) return p->transmark + E_999_0X00; //把返回码置为交易标记 if(p->cardbefbal - p->cardaftbal != p->amount) return E_999_CARD_BALANCE; //上传流水出入卡余额有误 if (0X99 == p->transmark) { if (p->amount <= 0) //上传流水交易发生金额有误 return E_999_AMT; } /* else { if (p->amount <= 0) return E_999_AMT; //上传流水交易发生金额有误 } */ if (0x90 == p->transmark) { if (p->amount <= 0) return E_999_AMT; } return 0; }
int F847228(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; char sysdate[9] = ""; char systime[7] = ""; int auth_cardno = 0; T_t_authcard tAuthCard; T_t_operator tOper; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); double uni_no = 0.0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; ret=pAccTrans->checkCfgUpdate(); if(ret) return ret; pAccTrans->clear(); GetCpackDataString(rPack,pAccTrans->cpackdata); pAccTrans->trans.transcode=TC_AUTHCARDUPD; ret=pAccTrans->addOperDtl(rPack->semp); if(ret) return ret; memset(&tAuthCard,0,sizeof tAuthCard); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); auth_cardno = rPack->lvol0; if(auth_cardno <= 0) { *pRetCode = E_INPUT_CARDNO; goto L_RETU; } if(strlen(rPack->scust_limit) == 0) { *pRetCode = E_INPUT_OPER_NULL; goto L_RETU; } if(IsInvalidDateTime(rPack->sdate0,"YYYYMMDD")) { *pRetCode = E_INPUT_DATE; goto L_RETU; } ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_AUTHCARD_NOT_EXISTS; else *pRetCode = E_DB_OPER_AUTHCARD_R; goto L_RETU; } if(tAuthCard.status[0] == STATUS_LOGOUT) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno); *pRetCode = E_AUTHCARD_HAS_CANCEL; goto L_RETU; } if(tAuthCard.cardstatus[CARDSTAT_TYPE_LOST]== '1') { writelog(LOG_ERR,"auth card is loss , card id [%d]",tAuthCard.cardno); *pRetCode = E_AUTHCARD_IS_LOSS; goto L_RETU; } memset(&tOper,0,sizeof tOper); ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode); *pRetCode = E_DB_OPERATOR_N; } else *pRetCode = E_DB_OPERATOR_R; goto L_RETU; } if(tOper.status[0]==STATUS_LOGOUT) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode); *pRetCode = E_OPERLOGON_UNREG; goto L_RETU; } des2src(tAuthCard.expiredate,rPack->sdate0); tAuthCard.privilege = rPack->lvol1; ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno); *pRetCode = E_DB_OPER_AUTHCARD_U; goto L_RETU; } SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_SDATE0,F_SCUST_LIMIT,0); out_pack->lvol0 = tAuthCard.cardno; des2src(out_pack->sdate0,tAuthCard.expiredate); out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->scust_limit,tAuthCard.opercode); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847226(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_AUTHCARDOPEN; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; char opercode[11] = ""; char work_key[51] = ""; T_t_operator tOper; T_t_authcard tAuthCard; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tOper,0,sizeof tOper); memset(&tAuthCard,0,sizeof tAuthCard); 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(opercode,rPack->sname2); des2src(trans.cardphyid,rPack->sname); des2src(trans.showcardno,rPack->sorder0); if(strlen(opercode) == 0) { return E_NOTEXIST_OPER; } if(strlen(rPack->scust_limit) == 0) { return E_INPUT_OPER_NULL; } ret = IsInvalidDateTime(rPack->sdate2,"YYYYMMDD"); if(ret) { return ret; } ret = DB_t_operator_read_by_opercode(opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_OPER; else return E_DB_OPERATOR_R; } if(tOper.status[0]=='0') { DB_t_operator_free_lock_by_c0(); return E_OPER_LOCK; } if(tOper.status[0]==STATUS_DELETE) { DB_t_operator_free_lock_by_c0(); return E_OPERLOGON_UNREG; } //todo:判断如果该操作员持有该卡已经发行过,那么系统允许重复发行,但是不计流水 //todo:用于解决操作员发行卡失败后,必须回收卡才能继续处理的问题 ret=DB_t_authcard_read_by_opercode_and_status(opercode,"1",&tAuthCard); if(ret!=DB_NOTFOUND) { if(0==ret) { if(strcmp(trans.cardphyid,tAuthCard.cardphyid)==0) { out_pack->lvol0 = tAuthCard.cardno; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expiredate); des2src(out_pack->scust_limit,tAuthCard.opercode); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.opername); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } else return E_AUTHCARD_EXIST; } else return E_DB_AUTHCARD_R; } // //记录存在 // if(tAuthCard.cardstatus[CARDSTAT_TYPE_LOST]=='1') // { // //修改原来卡为注销状态 // tAuthCard.status[0]==STATUS_DELETE; // des2src(tAuthCard.closedate,pAccTrans->trans.transdate); // ret=DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); // if(ret) // { // return E_DB_AUTHCARD_U; // } // } //return E_OPER_ALREADY_HAS_AUTHCARD; // } ret=GetSysParaVal(GLOBE_999_DEVAUTHKEY,work_key); if( ret) { return ret; } ret = getNewUniqNo(KEYTYPE_CARDNO,&(trans.cardno)); if(ret) { return ret; } tAuthCard.cardno = trans.cardno; des2src(tAuthCard.opendate,pAccTrans->trans.transdate); des2src(tAuthCard.opercode,opercode); des2src(tAuthCard.cardphyid,trans.cardphyid); des2src(tAuthCard.showcardno,trans.showcardno); des2src(tAuthCard.expiredate,rPack->sdate2); tAuthCard.privilege = rPack->lvol0; tAuthCard.status[0]=STATUS_NORMAL; tAuthCard.lossflag[0]='0'; // TODO : 检查物理卡号是否已经存在 ret = DB_t_authcard_add(&tAuthCard); if(ret) { if(DB_REPEAT == ret) return E_DB_AUTHCARD_E; else return E_DB_AUTHCARD_I; } out_pack->lvol0 = tAuthCard.cardno; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expiredate); des2src(out_pack->scust_limit,tAuthCard.opercode); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.opername); PutRow(handle,out_pack,pRetCode,szMsg); ret = DB_t_operator_read_lock_by_c0_and_opercode(opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_OPER; else return E_DB_OPERATOR_R; } tOper.cardno=tAuthCard.cardno; ret=DB_t_operator_update_lock_by_c0(&tOper); if(ret) { return E_DB_OPERATOR_U; } /* int cardtype=0; ret=UseShowCardNo(trans.opercode,tAuthCard.showcardno,cardtype); if(ret) { return ret; } if(cardtype!=CARDTYPE_AUTH) { return E_CARDTYPE_NOT_AUTHCARD; } T_t_carddtl carddtl; memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,pAccTrans->sysPara.sSettleDate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=CARDTYPE_AUTH; carddtl.usetype=CARDUSETYPE_USE; carddtl.inoutflag=INOUTFLAG_OUT; carddtl.transcnt=1; strcpy(carddtl.summary,"发行授权卡"); des2src(carddtl.cardphyid,tAuthCard.cardphyid); des2src(carddtl.showcardno,tAuthCard.showcardno); ret=DB_t_carddtl_add(&carddtl); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDDTL_E; else return E_DB_CARDDTL_I; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); transdtl.status[0]=DTLSTATUS_SUCCESS; transdtl.revflag[0]='0'; transdtl.errcode=0; transdtl.custid=trans.custid; strcpy(transdtl.custname,trans.custname); strcpy(transdtl.transdate,trans.transdate); strcpy(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,pAccTrans->sysPara.sSettleDate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; des2src(transdtl.opercode,trans.opercode); transdtl.cardno=trans.cardno; des2src(transdtl.custname,tOper.opername); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } */ 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; }
static int AddCard(T_t_customer& tCustomer,T_t_card& tCard) { //检查卡是否已经使用 int ret=0; char sysdate[9]; getsysdate(sysdate); tCard.status[0]=STATUS_NORMAL; ret=DB_t_card_read_by_cardphyid_and_status(tCard.cardphyid,tCard.status,&tCard); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return E_CARDPHYID_EXIST; else return E_DB_CARD_R; } ret=DB_t_card_read_by_showcardno_and_status(tCard.showcardno,tCard.status,&tCard); if(ret!=DB_NOTFOUND) { if(DB_SUCCESS==ret) return E_SHOWCARDNO_EXIST; else return E_DB_CARD_R; } T_t_cardtype tCardtype; memset(&tCardtype,0,sizeof(tCardtype)); ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardtype); if(ret) { if(DB_NOTFOUND==ret) return E_DB_CARDTYPE_N; else return E_DB_CARDTYPE_R; } //判断到期日期 if(strlen(tCard.expiredate)<1) { ret=IsInvalidDateTime(tCustomer.outdate,"YYYYMMDD"); if(ret==0) { if(strncmp(tCustomer.outdate,sysdate,8)>0) { des2src(tCard.expiredate,tCustomer.outdate); } } else { if(tCardtype.validdays<1) return E_NOSET_CARDTYPE_VALIDDAYS; ret=calcEndDate(sysdate,tCardtype.validdays,tCard.expiredate); if(ret) return ret; } } else { ret=IsInvalidDateTime(tCard.expiredate,"YYYYMMDD"); if(ret) return E_INPUT_EXPIREDATE; if(strncmp(tCard.expiredate,sysdate,8)<0) return E_INPUT_EXPIREDATE; } tCard.custid=tCustomer.custid; des2src(tCard.stuempno,tCustomer.stuempno); memset(tCard.cardattr,'0',sizeof(tCard.cardattr)); des2src(tCard.opendate,sysdate); getfmtsysdatetime(tCard.lastsaved); ret = getNewUniqNo(KEYTYPE_CARDNO,&tCard.cardno); //获取最大卡号 if(ret) { return ret; } ret=DB_t_card_add(&tCard); if(ret) { if(DB_REPEAT==ret) return E_DB_CARD_E; else return E_DB_CARD_I; } return 0; }
int F847104(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret =0; int len = 0; int i=0; int hi_cutid=0; char h_showcardid[11] = ""; //显示卡号 char h_password[7] = ""; //卡密码 double h_temp_Card_id = 0; //卡号 double dSerialNo=0; char seed_key[17] = ""; //种子密钥 char card_endtime[8 + 1] = ""; //卡的有效截至日期 char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; char sEndDate[9]=""; char sMsg[256]=""; char sMaxCardBalance[20]=""; char lost_date[11]=""; char buf[64] = ""; int write_failed = 0; double dMaxCardBalance=0; int lost_card_id=0; T_t_pif_card tCard; T_t_pif_card tOldCard; T_t_cif_customer tCustomer; T_t_pif_spefee tSpeFee; // T_t_pif_cardlossinfo tCardLossInfo; T_t_tif_tradeserial tradeserial; T_t_aif_account tAccount; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCUST_AUTH2, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_LSERIAL1,F_VSMESS,0); memset(&tCard,0,sizeof(tCard)); memset(&tOldCard,0,sizeof(tOldCard)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSpeFee,0,sizeof(tSpeFee)); // memset(&tCardLossInfo,0,sizeof(tCardLossInfo)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&IA,0,sizeof(IA)); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } //检查客户信息,判断是否可以发行卡 hi_cutid=rPack->lvol0; //客户号 des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 trim(h_showcardid); ret=IsExistFreezeCardByCustomId(hi_cutid); if(ret) { *pRetCode = ret; goto L_RETU; } ret=IsExistNoLostCardByCustomId(hi_cutid); if(ret) { *pRetCode = ret; goto L_RETU; } 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=GetLostCardIdByCustomId_TypeId(hi_cutid,CT_NORMAL,&lost_card_id); if(ret) { writelog(LOG_ERR,"customer[%d]tCard type_id[%d]",hi_cutid,CT_NORMAL); *pRetCode = ret; goto L_RETU; } /* ret=DB_t_pif_cardlossinfo_read_by_card_id_and_state_id(lost_card_id, STATE_VALID, &tCardLossInfo); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } */ ret=get_latest_lost_date_by_card_no(lost_card_id,lost_date); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); *pRetCode =ret; goto L_RETU; } //先检查客户的挂失的正式卡是否到了补办日期 ret=GetLostCardValiddate(lost_date,sEndDate); if(ret) { *pRetCode =ret; goto L_RETU; } if(strncmp(sEndDate,sysdate,8)>0) { writelog(LOG_ERR,"lost_normal_card_id[%d]lost_date[%s]end_date[%s]",lost_card_id,lost_date,sEndDate); *pRetCode = E_NORMALCARD_NOT_REACH_ENDDATE; goto L_RETU; } /* //更新卡挂失日期表中该卡状态为无效 ret=UpdateCardLossInfoState(lost_card_id,STATE_VALID,STATE_INVALID); if(ret) { *pRetCode = ret; goto L_RETU; } */ //注销原卡 ret=DB_t_pif_card_read_lock_by_cur_and_card_id(lost_card_id,&tOldCard); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } if(tOldCard.state_id[CARDSTAT_TYPE_WFAIL] == STATE_TRUE && tOldCard.is_managefee[0] == CARDWFAIL_WATER ) { // 转账的时候写卡失败 write_failed = 1; } else { des2src(tCard.state_id,CARDSTAT_REG); //卡状态 } des2src(tOldCard.state_id,CARDSTAT_LOGOUT); //注销 des2src(tOldCard.end_time,sysdate); //注销日期 ret=DB_t_pif_card_update_lock_by_cur(&tOldCard); if(ret) { writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_CARDNO_NOT_EXIST; else *pRetCode = E_DB_CARD_R; goto L_RETU; } DB_t_pif_card_free_lock_by_cur(); if(write_failed) { ret = GetXmlValue(tOldCard.comments,sizeof buf,XML_KEY_SERIALNO2,buf); if(ret) { *pRetCode = ret; goto L_RETU; } AddXmlItemStr(tCard.comments,XML_KEY_SERIALNO2,buf); ret = GetXmlValue(tOldCard.comments,sizeof buf,XML_KEY_OPERATEDATE2,buf); if(ret) { *pRetCode = ret; goto L_RETU; } AddXmlItemStr(tCard.comments,XML_KEY_OPERATEDATE2,buf); ret = GetXmlValue(tOldCard.comments,sizeof buf,XML_KEY_TRADECODE2,buf); if(ret) { *pRetCode = ret; goto L_RETU; } AddXmlItemStr(tCard.comments,XML_KEY_TRADECODE2,buf); tCard.is_managefee[0] = CARDWFAIL_WATER; } 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); // 准备数据插入卡信息表 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); } tradeserial.trade_fee = rPack->damt0; //金额 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); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = tCustomer.cut_id; //客户标识 tradeserial.sys_id = 0; //外部系统标识 des2src(tradeserial.oper_code, rPack->scust_limit); //操作员号 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,"666666"); } ret = getNewUniqNo(KEYTYPE_CARD_ID,&h_temp_Card_id); //获取最大卡号 if(ret) { *pRetCode = ret; goto L_RETU; } tCard.card_id = (int)h_temp_Card_id; //卡号 des2src(tCard.showid,h_showcardid); //显示卡号 des2src(tCard.is_main,TYPE_YES); //是否为主卡 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=DB_t_aif_account_read_lock_by_c0_and_card_id_and_purse_id(lost_card_id,PURSE_NO_ONE,&tAccount); if (ret) { writelog(LOG_ERR,"normalcard_account_id[%s]",lost_card_id); if(DB_NOTFOUND==ret) *pRetCode = E_ACTNO_NOT_EXIST; else *pRetCode = E_DB_ACCOUNT_R; } if(tAccount.current_state!=1) { *pRetCode=E_ACTNO_LOGOUT; goto L_RETU; } tAccount.card_id=tCard.card_id; tAccount.card_balance=tAccount.cur_freebala; //更新卡余额与库余额一致 tAccount.consume_count=0; ret=DB_t_aif_account_update_lock_by_c0(&tAccount); if (ret) { writelog(LOG_ERR,"DB_t_aif_account_update_lock_by_cur4 ret[%d]account_id[%s]",ret,tAccount.account_id); if(DB_NOTFOUND==ret) *pRetCode = E_ACTNO_EXIST; else *pRetCode = E_DB_ACCOUNT_U; } DB_t_aif_account_free_lock_c0(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo); //获得最大流水号 if(ret) { *pRetCode=ret; goto L_RETU; } tradeserial.serial_no=(int)dSerialNo; tradeserial.serial_type=TXCODE_CHANGE_CARD; tradeserial.card_id=tCard.card_id; //新卡号 des2src(tradeserial.showid,tCard.showid); //显示卡号 strcpy(IA.sArrInActno[0],tAccount.account_id); //账号 IA.dArrInAmt[0]=tradeserial.trade_fee; //交易金额 IA.iUseCardFlag=USE_CARD_TYPE_ONLINE; //联机交易 IA.dInCardBala=tAccount.cur_freebala; //入卡值 IA.iTxCnt=1; IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[1]=rPack->lvol1; IA.iArrInFeeSwitch[2]=rPack->lvol2; IA.iArrInFeeSwitch[3]=rPack->lvol3; IA.iArrInFeeSwitch[4]=rPack->lvol4; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; ret=process(&IA,&tradeserial); if(ret) { 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_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; case TXTYPE_TOLL_CARDCOST: 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=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); if(amtcmp(tradeserial.out_balance,dMaxCardBalance)>0) { writelog(LOG_ERR,"tradeserial.out_balance[%lf]",tradeserial.out_balance); *pRetCode=E_AMT_EXCEED_MAX; 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; //流水号 // add by 汤成 2005-8-8 // 增加向名单表写入记录 ret = InsertToBlkList((int)h_temp_Card_id,CHCARD_BLACKLIST); if(ret) { *pRetCode = ret; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847123(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int card_id=0; char sSeedKey[17] = ""; //种子密钥 char sPwd[7] = ""; //卡密码 char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; double dSerialno=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 tTradeserial; 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(&tTradeserial,0,sizeof(tTradeserial)); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL10,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); card_id=rPack->lvol0; if(card_id<1) { *pRetCode=E_INPUT_CARDNO; goto L_RETU; } 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(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); DB_t_pif_card_free_lock_by_cur(); *pRetCode=E_DB_CARD_R; goto L_RETU; } if('3'!=tCard.state_id[CARDSTAT_TYPE_REG]) { DB_t_pif_card_free_lock_by_cur(); if('2'==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_CARDNO_LOGOUT; 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; else if(STATE_TRUE==tCard.state_id[CARDSTAT_TYPE_REG]) *pRetCode=E_OLDCARDINFO_NOSAVE; goto L_RETU; } trim(rPack->sbank_acc); trim(rPack->scust_no); trim(rPack->sdate0); if(strlen(rPack->scust_no)) { ret=IsExistShowCardNo(rPack->scust_no); if(ret) { *pRetCode = ret; goto L_RETU; } } if(strcmp(tCard.physical_no,rPack->sbank_acc)!=0) { ret=IsExistCardByPhyCardNo(rPack->sbank_acc); if(ret) { *pRetCode = ret; goto L_RETU; } } ret=IsInvalidDateTime(rPack->sdate0,"YYYYMMDD"); if(ret) { *pRetCode=ret; goto L_RETU; } des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 des2src(tCard.showid,rPack->scust_no); //显示卡号 des2src(tCard.end_time,rPack->sdate0); //到期日期 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(); memcpy(sSeedKey,STATIC_SEED_KEY,16); //读种子密钥 EncodePwd(sSeedKey,sPwd,tCard.password,1); //卡密码 //注销帐户 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; } if(tAccount.consume_count<1) { *pRetCode=E_CARD_TXCNT; goto L_RETU; } if(amtcmp(tAccount.card_balance,0)<0) { *pRetCode=E_CARD_BALA; 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,&dSerialno); //获得流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } tTradeserial.serial_no = (int)dSerialno; //流水号 tTradeserial.other_seri_no = 0; //上传端流水号 tTradeserial.serial_type = 847123; //交易代码;备注:发卡+充值 用一个交易码,即847101; 发卡(不充值)另用一个交易码,即新的发卡程序文件名,从而区分发卡充值与发卡不充值的卡操作信息。 tTradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tTradeserial.operate_date,sysdate); //发生日期 des2src(tTradeserial.operate_time,systime); //发生时间 des2src(tTradeserial.collect_date,sysdate); //采集日期 des2src(tTradeserial.collect_time,systime); //采集时间 des2src(tTradeserial.enteract_date,logicdate); //处理日期 des2src(tTradeserial.enteract_time,systime); //处理时间 des2src(tTradeserial.oper_code , rPack->scust_limit); tTradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tTradeserial.device_id = rPack->lvol7; //采集设备标识 tTradeserial.card_id = tCard.card_id; //卡号 des2src(tTradeserial.showid,tCard.showid); //显示卡号 tTradeserial.purse_id = PURSE_NO_ONE; //钱包号 tTradeserial.customer_id = tCard.cosumer_id; //客户标识 //插入交易流水表 ret = DB_t_tif_tradeserial_add(&tTradeserial); 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; } out_pack->lvol0 = card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,tCard.showid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scust_auth2,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,sPwd); //卡密码 des2src(out_pack->sdate0,tCard.end_time); //有效截至日期 out_pack->damt2=D4U5(tAccount.card_balance,2); //卡余额 out_pack->lvol10=tAccount.consume_count; //消费次数 out_pack->lserial1=tTradeserial.serial_no; //流水号 sprintf(out_pack->vsmess,"流水号:%d 卡号:%d 学工号:%s 姓名:%s 卡余额:%.2lf元",tTradeserial.serial_no,card_id,tCustomer.stuemp_no,tCustomer.cut_name,tAccount.card_balance); writelog(LOG_DEBUG,out_pack->vsmess); // add by 汤成 2005-8-8 // 增加向名单表写入记录 ret = InsertToBlkList(card_id,CHCARD_BLACKLIST); if(ret) { *pRetCode = ret; goto L_RETU; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
static int do_848256(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { T_t_door_holiday holiday; T_t_door_holiday_times times; T_t_door_times_group tgroup; int ret; memset(&holiday,0,sizeof holiday); memset(×,0,sizeof times); memset(&tgroup,0,sizeof tgroup); if(unlike_tbl_id(in_pack->lvol0)) return E_INPUT_ERROR; ret = IsInvalidDateTime(in_pack->sdate0,"YYYYMMDD"); if(ret) { sprintf(szMsg,"日期格式错误[%s]",in_pack->sdate0); writelog(LOG_ERR,szMsg); return ret; } if(unlike_tbl_id(in_pack->lvol1)) { sprintf(szMsg,"日期[%s] 需选择时间段组",in_pack->sdate0); writelog(LOG_ERR,szMsg); return E_INPUT_ERROR; } ret = DB_t_door_holiday_read_by_holiday_id(in_pack->lvol0,&holiday); if(ret) { if(DB_NOTFOUND == ret) { return E_DB_DOOR_HOLIDAY_N; } return E_DB_DOOR_HOLIDAY_R; } ret = DB_t_door_times_group_read_by_tgid(in_pack->lvol1,&tgroup); if(ret) { if(DB_NOTFOUND == ret) return E_DB_DOOR_TIME_GROUP_N; return E_DB_DOOR_TIME_GROUP_R; } if(in_pack->sstatus0[0] == '1' || in_pack->sstatus0[0] == '3' ) { ret = DB_t_door_holiday_times_del_by_hid(in_pack->lvol0); if(ret) { if(ret != DB_NOTFOUND) return E_DB_DOOR_HOLIDAY_TIME_D; } } times.hid = in_pack->lvol0; des2src(times.h_date,in_pack->sdate0); times.time_grp_id = in_pack->lvol1; times.flag = DOOR_FLAG_NORMAL; getsysdatetime(times.last_update); ret = DB_t_door_holiday_times_add(×); if(ret) { if(DB_REPEAT == ret) { // 更新 ret = DB_t_door_holiday_times_update_by_hid_and_h_date( in_pack->lvol0,in_pack->sdate0,×); if(ret) { writelog(LOG_ERR,"更新节假日设置信息失败,hid[%d] date[%s]" ,in_pack->lvol0,in_pack->sdate0); sprintf(szMsg,"更新节假日[%s] 失败",in_pack->sdate0); return E_DB_DOOR_HOLIDAY_TIME_U; } } else { sprintf(szMsg,"增加时间段[%s] 失败",in_pack->sdate0); writelog(LOG_ERR,szMsg); return E_DB_DOOR_HOLIDAY_TIME_I; } } if(in_pack->sstatus0[0] == '2' ||in_pack->sstatus0[0] == '3' ) { // 更新时间段组表 des2src(holiday.last_update,times.last_update); ret = count_times_of_holiday(holiday.holiday_id,&(holiday.day_cnt)); if(ret) { sprintf(szMsg,"统计节假日[%s] 时段错误",holiday.holiday_name); writelog(LOG_ERR,szMsg); return ret; } ret = DB_t_door_holiday_update_by_holiday_id(holiday.holiday_id,&holiday); if(ret) { sprintf(szMsg,"完成节假日设置,更新时间截失败,[%s]",holiday.holiday_name); writelog(LOG_ERR,szMsg); if(DB_NOTFOUND == ret) return E_DB_DOOR_HOLIDAY_N; return E_DB_DOOR_HOLIDAY_U; } } return 0; }
int F847121(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char logicdate[11]=""; char sysdate[11]=""; char systime[9]=""; double dSerialno=0; int cardno=0; char cardphyid[16+1]=""; T_t_card tCard; T_t_tif_tradeserial tTradeserial; memset(&tCard,0,sizeof(tCard)); memset(&tTradeserial,0,sizeof(tTradeserial)); cardno=rPack->lvol0; des2src(cardphyid,rPack->sbank_acc); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } trim(rPack->scust_limit); trim(rPack->scust_limit2); trim(rPack->semp_pwd); /* if(rPack->lvol2!=IS_NO) { 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; } } */ trim(rPack->scust_no); ret=IsInvalidDateTime(rPack->sdate0, "YYYYMMDD"); if(ret) { *pRetCode=ret; goto L_RETU; } //判断卡状态是否为写卡未成功状态 if(cardno==0) { ret=get_cardno_by_physical_no(&cardno,cardphyid); if(ret) { *pRetCode= E_CARDNO_NOT_EXIST; writelog(LOG_ERR,"get_cardno_by_physical_no error,ret=[%d] cardphyid=[%s]",ret,cardphyid); goto L_RETU; } } ret=DB_t_card_read_lock_by_cur_and_cardno(cardno, &tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_R; goto L_RETU; } if('2'==tCard.cardattr[CARDSTAT_TYPE_REG]) { DB_t_card_free_lock_by_cur(); *pRetCode=E_CARD_CLOSE; goto L_RETU; } // if('3'==tCard.cardattr[CARDSTAT_TYPE_REG]) // { // DB_t_card_free_lock_by_cur(); // *pRetCode=E_CARD_CHANGE; // goto L_RETU; // } trim(rPack->scust_no); // if(strlen(rPack->scust_no)!=0) // { // if(strcmp(tCard.showid,rPack->scust_no)!=0) // { // ret=IsExistShowCardNo(rPack->scust_no); // if(ret) // { // DB_t_card_free_lock_by_cur(); // writelog(LOG_ERR,"showcardno[%s]",rPack->scust_no); // *pRetCode=ret; // goto L_RETU; // } // } // } trim(rPack->sbank_acc); if(strcmp(tCard.cardphyid,rPack->sbank_acc)!=0) { DB_t_card_free_lock_by_cur(); writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,rPack->sbank_acc); *pRetCode= E_CARD_PHYNO_DIFFER; goto L_RETU; } if(strlen(rPack->scust_no)==10) des2src(tCard.showid,rPack->scust_no); if(strlen(rPack->sdate0)==8) des2src(tCard.endtime,rPack->sdate0); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) *pRetCode= E_CARDNO_NOT_EXIST; else *pRetCode= E_DB_CARD_U; goto L_RETU; } DB_t_card_free_lock_by_cur(); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialno); //获得流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } tTradeserial.serial_no = D2I(dSerialno); //流水号 tTradeserial.other_seri_no = 0; //上传端流水号 tTradeserial.serial_type = 847121; //交易代码;备注:发卡+充值 用一个交易码,即847101; 发卡(不充值)另用一个交易码,即新的发卡程序文件名,从而区分发卡充值与发卡不充值的卡操作信息。 tTradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tTradeserial.operate_date,sysdate); //发生日期 des2src(tTradeserial.operate_time,systime); //发生时间 des2src(tTradeserial.collect_date,sysdate); //采集日期 des2src(tTradeserial.collect_time,systime); //采集时间 des2src(tTradeserial.enteract_date,logicdate); //处理日期 des2src(tTradeserial.enteract_time,systime); //处理时间 des2src(tTradeserial.opercode , rPack->scust_limit); tTradeserial.maindeviceid = rPack->lvol6; //上传工作站标识 tTradeserial.deviceid = rPack->lvol7; //采集设备标识 tTradeserial.cardno = tCard.cardno; //卡号 des2src(tTradeserial.showid,tCard.showid); //显示卡号 tTradeserial.purseno = PURSE_NO_ONE; //钱包号 tTradeserial.custid = tCard.custid; //客户标识 // tTradeserial.reviseserial_no=dSerialno; //原写卡失败流水号 des2src(tTradeserial.reserve_1,rPack->scust_limit2); //授权操作员号 des2src(tTradeserial.reserve_2,rPack->semp_pwd); //授权操作员密码 if(rPack->lvol2!=IS_NO) { // 如果写卡余额 tTradeserial.in_balance = rPack->damt0; tTradeserial.out_balance = rPack->damt1; tTradeserial.trade_fee = rPack->damt1 - rPack->damt0; tTradeserial.trade_count = rPack->lvol1+1; } // 插入交易流水表 ret = DB_t_tif_tradeserial_add(&tTradeserial); 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 F847125(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int hi_cuttype = 0; //客户类型 int i=0; int ret = 0; double dUniqno=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]=""; double dSerial_no = 0; char sMaxCardBalance[20]=""; double dMaxCardBalance=0; T_t_pif_card tCard; T_t_aif_account tAccount; T_t_tif_tradeserial tradeserial; T_t_cif_customer tCustomer; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCUST_AUTH2, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_DAMT3,F_DAMT4,F_DAMT5,F_LSERIAL1,F_VSMESS,0); memset(&IA,0,sizeof(IA)); memset(&tCard, 0, sizeof(tCard)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tCustomer,0,sizeof(tCustomer)); #ifdef DEBUG writelog(LOG_DEBUG,"rPack->damt0[%lf]",rPack->damt0); writelog(LOG_DEBUG,"rPack->scust_auth2[%s]",rPack->scust_auth2); #endif tradeserial.trade_fee=rPack->damt0; //发生额 hi_cuttype = rPack->lvol3; //客户类别 trim(rPack->scust_no); des2src(h_showcardid,rPack->scust_no); //显示卡号 des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 des2src(card_endtime,rPack->sdate0); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } ret=IsInvalidDateTime(card_endtime,"YYYYMMDD"); if(ret) { *pRetCode=ret; goto L_RETU; } if(strlen(h_showcardid)!=10) { *pRetCode=E_INPUT_SHOWID; goto L_RETU; } ret=IsExistShowCardNo(h_showcardid); if(ret) { *pRetCode = ret; goto L_RETU; } ret=IsExistCardByPhyCardNo(tCard.physical_no); //物理卡号 if(ret) { writelog(LOG_ERR,"physical_no[%s]",tCard.physical_no); *pRetCode = ret; goto L_RETU; } //检查金额是否超过最大额度 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; } //先增加客户 ret=getNewUniqNo(KEYTYPE_CUSTOMER, &dUniqno); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"getNewUniqNo err[%d]",ret); goto L_RETU; } tCustomer.cut_id=(int)dUniqno; tCustomer.cut_type=hi_cuttype; //客户类型 tCustomer.fee_type=tCustomer.cut_type; tCustomer.cut_state=CUSTSTAT_REGIST; des2src(tCustomer.is_havecard,TYPE_YES); // tCustomer.area=rPack->lvol10; //区域 /* ret=GetTempPersonId(tCustomer.stuemp_no); //员工号 if(ret) { *pRetCode=ret; goto L_RETU; } */ // des2src(tCustomer.stuemp_no,h_showcardid); snprintf(tCustomer.cut_name,20,"临%.10s",h_showcardid); //客户 名称 des2src(tCustomer.reg_time,sysdate); //注册日期 ret=DB_t_cif_customer_add(&tCustomer); if(ret) { *pRetCode = E_DB_CUSTOMER_I; writelog(LOG_ERR,"DB_t_cif_customer_add ret[%d]",ret); goto L_RETU; } // 准备数据插入卡信息表 memcpy(seed_key,STATIC_SEED_KEY,sizeof(seed_key)); //读种子密钥 // 默认密码, 初始取身份证的后6位, 没有身份证号用666666. strcpy(h_password,"666666"); ret = getNewUniqNo(KEYTYPE_CARD_ID,&h_temp_Card_id); //获取最大卡号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret[%d]",ret); goto L_RETU; } tCard.card_id = (int)h_temp_Card_id; //卡号 des2src(tCard.showid,h_showcardid); //显示卡号 des2src(tCard.is_main,TYPE_YES); //是否为主卡 des2src(tCard.state_id,CARDSTAT_REG); //卡状态 tCard.type_id = CT_TEMP_NONAME; //卡类别 EncodePwd(seed_key,h_password,tCard.password,0); //卡密码 tCard.cosumer_id = tCustomer.cut_id; //客户标识 tCard.account_count = ACCOUNT_COUNT_ONE; //卡对应帐户个数 des2src(tCard.begin_time,logicdate); //注册时间 des2src(tCard.end_time, card_endtime); //截至时间 tCard.phytype = PHYTYPE_NO_ONE; //设备物理型号;默认为1 // 插入卡信息 ret = DB_t_pif_card_add(&tCard); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_CARD_E; else *pRetCode = E_DB_CARD_I; goto L_RETU; } // 准备数据插入帐户信息表 ret = getNewActno(tAccount.account_id); //获得最大帐号 if (ret) { *pRetCode = ret; goto L_RETU; } des2src(tAccount.open_date,logicdate); //开户时间 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 = hi_cuttype; //客户类别 des2src(tAccount.stuemp_no,tCustomer.stuemp_no); //客户学号或员工号 tAccount.card_id =tCard.card_id; //关联卡号 tAccount.purse_id = PURSE_NO_ONE; //关联卡钱包号 tAccount.card_type = tCard.type_id; //卡类别 des2src(tAccount.subno,SUBJECT_INDIVIDUALSAVING); //所属科目 des2src(tAccount.isautotra,TYPE_NO); //是否自动转帐 // 插入帐户信息表 ret = DB_t_aif_account_add(&tAccount); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_ACCOUNT_E; else *pRetCode = E_DB_ACCOUNT_I; goto L_RETU; } //准备数据插入交易流水表 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerial_no); //获得最大流水号 if(ret) { *pRetCode = ret; goto L_RETU; } tradeserial.serial_no = (int)dSerial_no; //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type = TXCODE_CARD_OPEN_FOR_TEMP; //交易代码 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.card_id = tCard.card_id; //卡号 des2src(tradeserial.showid,tCard.showid); //显示卡号 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = tCustomer.cut_id; //客户标识 des2src(tradeserial.oper_code,rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 tradeserial.trade_count=1; //当前卡交易次数 des2src(IA.sArrInActno[0],tAccount.account_id); //帐户 IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; IA.dArrInAmt[0]=tradeserial.trade_fee; IA.iArrInFeeSwitch[0]=rPack->lvol0; IA.iArrInFeeSwitch[1]=rPack->lvol1; IA.iArrInFeeSwitch[2]=rPack->lvol2; IA.iArrInFeeSwitch[3]=rPack->lvol3; IA.iArrInFeeSwitch[4]=rPack->lvol4; IA.iArrInFeeSwitch[5]=rPack->lvol5; IA.iArrInFeeSwitch[6]=rPack->lvol6; IA.iArrInFeeSwitch[7]=rPack->lvol7; IA.iArrInFeeSwitch[8]=rPack->lvol8; IA.iArrInFeeSwitch[9]=rPack->lvol9; IA.iArrInFeeSwitch[10]=rPack->lvol10; // 调用入账子模块 ret=process(&IA,&tradeserial); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"process ret[%d]",ret); goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1; i<=IA.iOutTxTypeCnt; i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_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; case TXTYPE_TOLL_CARDCOST: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,"卡当前余额:%.2lf元",tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); // 插入交易流水表 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } // 返回卡号\密码\显示卡号\客户类型\图书证号\有效截至日期 out_pack->lvol0 = (int)h_temp_Card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,h_showcardid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 // des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scust_auth2,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,h_password); //卡密码 des2src(out_pack->sdate0,card_endtime); //有效截至日期 out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->damt3=tradeserial.boardfee; //搭伙费 out_pack->damt4=tradeserial.cost_fee; //卡 成本 费 out_pack->damt5=tradeserial.in_fee; //手续费 out_pack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847124(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int hi_cutid = 0; //客户ID int hi_cuttype = 0; //客户类型 int i=0; int ret = 0; int len = 0; char h_showcardid[11] = ""; //显示卡号 char h_password[7] = ""; //卡密码 double h_temp_Card_id = 0; //卡号 char seed_key[17] = ""; //种子密钥 char card_endtime[8 + 1] = ""; //卡的有效截至日期 char logicdate[11]=""; //业务日期 char sysdate[11]=""; char systime[9]=""; char sMsg[256]=""; char sMaxCardBalance[20]=""; double dMaxCardBalance=0; int type=0; //充值类型 T_t_pif_card tCard; T_t_cif_customer tCustomer; T_t_aif_account tAccount; T_t_tif_tradeserial tradeserial; T_t_tif_savdtl tSavdtl; T_t_pif_spefee tSpeFee; double h_temp_Serial_no = 0; InAcc IA; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&IA,0,sizeof(IA)); memset(&tCard, 0, sizeof(tCard)); memset(&tAccount,0,sizeof(tAccount)); memset(&tradeserial,0,sizeof(tradeserial)); memset(&tSpeFee,0,sizeof(tSpeFee)); memset(&tCustomer,0,sizeof(tCustomer)); memset(&tSavdtl,0,sizeof(tSavdtl)); ResetNormalCPack(&aPack,0,1); SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5, F_SCUST_NO, F_SCUST_NO2,F_SCUST_AUTH,F_SCERT_NO, F_SDATE0,F_SNAME,F_SNAME2, F_SOPEN_EMP,F_SSTATUS0, F_DAMT2,F_LSERIAL1,F_VSMESS, F_SORDER0,F_SORDER1,F_SORDER2, F_SHOLDER_AC_NO,F_SSTAT_TYPE,F_SSTAT_TYPE2, F_SNATION_CODE,F_SBRANCH_CODE0, 0); hi_cutid = rPack->lvol0; //客户ID hi_cuttype = rPack->lvol3; //客户类别 //满足大学城的需求,用客户号替代显示卡号 //des2src(h_showcardid,rPack->scust_no); //显示卡号 sprintf(h_showcardid,"%010d",hi_cutid); getsysdate(sysdate); getsystime(systime); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } //检查客户信息,判断是否可以发行卡 des2src(tCard.physical_no, rPack->sbank_acc); //物理卡号 trim(h_showcardid); if(strlen(h_showcardid)) { ret=IsExistShowCardNo(h_showcardid); if(ret) { *pRetCode = ret; goto L_RETU; } } ret=IsExistCardByPhyCardNo(tCard.physical_no); if(ret) { *pRetCode = ret; goto L_RETU; } ret=IsExistCardByCustomId(hi_cutid); if (ret) { *pRetCode = ret; goto L_RETU; } ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(hi_cutid, &tCustomer); if(ret) { writelog(LOG_ERR,"cut_id[%d]",hi_cutid); if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_R; goto L_RETU; } //得到收费类别 if(tCustomer.fee_type<1) { ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee); if(ret) { if(DB_NOTFOUND==ret) { tCustomer.fee_type=tCustomer.cut_type; } else { DB_t_cif_customer_free_lock_cur(); *pRetCode=E_DB_SPEFEE_R; goto L_RETU; } } else { tCustomer.fee_type=tSpeFee.fee_type; } //更新客户表的收费类别字段 } tCustomer.use_flag[0]='1'; ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer); if(ret) { if(DB_NOTFOUND==ret) *pRetCode= E_CUSTOMER_NOT_EXIST; else *pRetCode= E_DB_CUSTOMER_U; goto L_RETU; } DB_t_cif_customer_free_lock_cur(); tradeserial.trade_fee =rPack->damt0; //检查金额是否超过最大额度 ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance); if(ret) { *pRetCode=ret; goto L_RETU; } dMaxCardBalance=atof(sMaxCardBalance); if(amtcmp(tradeserial.trade_fee,dMaxCardBalance)>0) { writelog(LOG_ERR,"tradeserial.trade_fee[%lf]",tradeserial.trade_fee); *pRetCode=E_AMT_EXCEED_MAX; goto L_RETU; } // 准备数据插入卡信息表 memcpy(seed_key,STATIC_SEED_KEY,sizeof(seed_key)); //读种子密钥 ret=IsInvalidDateTime(rPack->sdate0,"YYYYMMDD"); if(ret) { *pRetCode = E_INPUT_DATE; goto L_RETU; } if(strncmp(rPack->sdate0,sysdate,8)<=0) { *pRetCode=E_INPUT_DATE; goto L_RETU; } des2src(card_endtime,rPack->sdate0); /* ret = GetCardValiddate(hi_cuttype,logicdate,card_endtime); //计算卡的有效期 if (ret) { *pRetCode = ret; goto L_RETU; } */ //规则如下: 当发卡人在系统中的证件类别为身份证并有身份证号时,卡密码取身份证的后六位数字(例如...987654321则为654321;...98765432X则为765432),否则都为“888888”。 if(strcmp(tCustomer.man_idtype,"1")==0) { get_init_passwd_by_man_id(tCustomer.man_id,h_password); } else strcpy(h_password,DEFAULT_CUST_PWD); ret = getNewUniqNo(KEYTYPE_CARD_ID,&h_temp_Card_id); //获取最大卡号 if(ret) { *pRetCode = ret; goto L_RETU; } tCard.card_id = D2I(h_temp_Card_id); //卡号 des2src(tCard.showid,h_showcardid); //显示卡号 des2src(tCard.is_main,TYPE_YES); //是否为主卡 des2src(tCard.state_id,CARDSTAT_REG); //卡状态 tCard.type_id = CT_TEMP_NAME; //卡类别 EncodePwd(seed_key,h_password,tCard.password,0); //卡密码 tCard.cosumer_id = hi_cutid; //客户标识 tCard.account_count = ACCOUNT_COUNT_ONE; //卡对应帐户个数 des2src(tCard.begin_time,logicdate); //注册时间 des2src(tCard.end_time, card_endtime); //截至时间 tCard.phytype = PHYTYPE_NO_ONE; //设备物理型号;默认为1 // 插入卡信息 ret = DB_t_pif_card_add(&tCard); if (ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_CARD_E; else *pRetCode = E_DB_CARD_I; goto L_RETU; } // 准备数据插入帐户信息表 ret = getNewActno(tAccount.account_id); //获得最大帐号 if (ret) { *pRetCode = ret; goto L_RETU; } des2src(tAccount.open_date,sysdate); //开户时间 des2src(tAccount.open_time,systime); tAccount.current_state = ACCOUNTSTAT_REGIST; //当前状态 tAccount.act_type = ACCTYPE_PERMAIN; //帐号类别 tAccount.customer_id = rPack->lvol0; //客户号 des2src(tAccount.cut_name,rPack->sname); //客户名称 tAccount.cut_type = hi_cuttype; //客户类别 des2src(tAccount.stuemp_no,rPack->scust_auth2); //客户学号或员工号 tAccount.card_id = tCard.card_id; //关联卡号 tAccount.purse_id = PURSE_NO_ONE; //关联卡钱包号 tAccount.card_type = tCard.type_id; //卡类别 des2src(tAccount.subno,SUBJECT_INDIVIDUALSAVING); //所属科目 des2src(tAccount.isautotra,TYPE_NO); //是否自动转帐 // 插入帐户信息表 ret = DB_t_aif_account_add(&tAccount); if (ret) { writelog(LOG_ERR,"ret [%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_ACCOUNT_E; else *pRetCode = E_DB_ACCOUNT_I; goto L_RETU; } ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&h_temp_Serial_no); //获得最大流水号 if(ret) { *pRetCode = ret; writelog(LOG_ERR,"ret [%d]",ret); goto L_RETU; } tradeserial.serial_no = D2I(h_temp_Serial_no); //流水号 tradeserial.other_seri_no = 0; //上传端流水号 tradeserial.serial_type=TXCODE_CARD_OPEN_TMP_CASH; //交易码 tradeserial.serial_state = SERISTAT_DEBT; //流水状态 des2src(tradeserial.operate_date,sysdate); //发生日期 des2src(tradeserial.operate_time,systime); //发生时间 des2src(tradeserial.collect_date,sysdate); //采集日期 des2src(tradeserial.collect_time,systime); //采集时间 des2src(tradeserial.enteract_date,logicdate); //处理日期 des2src(tradeserial.enteract_time,systime); //处理时间 tradeserial.maindevice_id = rPack->lvol6; //上传工作站标识 tradeserial.device_id = rPack->lvol7; //采集设备标识 tradeserial.card_id = tCard.card_id; //卡号 des2src(tradeserial.showid,tCard.showid); //显示卡号 tradeserial.purse_id = PURSE_NO_ONE; //钱包号 tradeserial.customer_id = hi_cutid; //客户标识 des2src(tradeserial.oper_code , rPack->scust_limit); //操作员代码 tradeserial.sys_id = 0; //外部系统标识 tradeserial.trade_count=1; //当前卡交易次数 type=rPack->lvol4; //交易类型 IA.dArrInAmt[0]=tradeserial.trade_fee; switch(type) { case TYPE_CASH: //现金 IA.iArrInFeeSwitch[1]=1; break; case TYPE_BILL: //支票 IA.iArrInFeeSwitch[2]=1; break; case TYPE_FUNDBOOK: //经费本 IA.iArrInFeeSwitch[3]=1; break; default: *pRetCode=E_INPUT_DEPOSIT_TYPE; goto L_RETU; } switch(type) { case TYPE_CASH: //现金 break; case TYPE_BILL: //支票 case TYPE_FUNDBOOK: //经费本 tSavdtl.amount=rPack->damt0; //发生额 if(amtcmp(tSavdtl.amount,0)<=0) break; des2src(tSavdtl.bill_no,rPack->sphone); //票据号码 if(strlen(tSavdtl.bill_no)<1) { *pRetCode=E_INPUT_BILLNO; goto L_RETU; } tSavdtl.card_no=tCard.card_id; //卡号 des2src(tSavdtl.oper_no,rPack->scust_limit); //操作员 tSavdtl.seqno=tradeserial.serial_no; //流水号 des2src(tSavdtl.tx_date,logicdate); //发生日期 des2src(tSavdtl.tx_time,systime); //发生时间 tSavdtl.cnt=1; //票据数量 tSavdtl.bill_type=type; //票据类型 tSavdtl.tx_code=tradeserial.serial_type; //交易码 ret=DB_t_tif_savdtl_add(&tSavdtl); if(ret) { if(DB_REPEAT==ret) *pRetCode = E_DB_SAVDTL_E; else *pRetCode = E_DB_SAVDTL_I; goto L_RETU; } break; default: *pRetCode=E_TXCODE_NOT_EXIST; goto L_RETU; } des2src(IA.sArrInActno[0],tAccount.account_id); //帐户 IA.iCardNo=tCard.card_id; IA.iFeeType=tCustomer.fee_type; //调用入账子模块 ret=process(&IA,&tradeserial); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"process ret[%d]",ret); goto L_RETU; } sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo); for(i=1;i<=IA.iOutTxTypeCnt;i++) { switch(IA.iArrOutTxType[i]) { case TXTYPE_TOLL_DEPOSIT: case TXTYPE_TOLL_DEPOSIT_BILL: case TXTYPE_TOLL_DEPOSIT_FUNDBOOK: case TXTYPE_DEDUCT_DEPOSIT: case TXTYPE_RETURN_DEPOSIT: tradeserial.deposit_fee=IA.dArrOutAmt[i]; break; case TXTYPE_PRE_TOLL_BOARD: case TXTYPE_PRE_TOLL_BOARD_BILL: case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK: case TXTYPE_TOLL_BOARD: case TXTYPE_DEDUCT_BOARD: case TXTYPE_RETURN_BOARD: case TXTYPE_RETURN_BOARD_BILL: case TXTYPE_RETURN_BOARD_FUNDBOOK: tradeserial.boardfee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CHARGE: case TXTYPE_TOLL_CHARGE_BILL: case TXTYPE_TOLL_CHARGE_FUNDBOOK: tradeserial.in_fee=IA.dArrOutAmt[i]; break; case TXTYPE_TOLL_CARDCOST: case TXTYPE_TOLL_CARDCOST_BILL: case TXTYPE_TOLL_CARDCOST_FUNDBOOK: tradeserial.cost_fee=IA.dArrOutAmt[i]; break; default: break; } if(amtcmp(IA.dArrOutAmt[i],0)!=0) { sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]); strcat(out_pack->vsmess,sMsg); } } sprintf(sMsg,"卡当前余额:%.2lf元",tradeserial.out_balance); strcat(out_pack->vsmess,sMsg); writelog(LOG_DEBUG,out_pack->vsmess); // 插入交易流水表 ret = DB_t_tif_tradeserial_add(&tradeserial); if (ret) { writelog(LOG_ERR,"ret[%d]",ret); if(DB_REPEAT==ret) *pRetCode = E_DB_TRADESERIAL_E; else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } if(amtcmp(tradeserial.out_balance,0)<0) { *pRetCode=E_ENTER_ACCOUNT; goto L_RETU; } // 返回卡号\密码\显示卡号\客户类型\图书证号\有效截至日期 out_pack->lvol0 = (int)h_temp_Card_id; //交易卡号 out_pack->lvol1 = tCustomer.cut_type; //客户类别 out_pack->lvol5 = tCustomer.fee_type; //收费类别 des2src(out_pack->scust_no,h_showcardid); //显示卡号 des2src(out_pack->scust_no2,tCustomer.classdept_no); //部门号 des2src(out_pack->scust_auth,tCustomer.stuemp_no); //学号 des2src(out_pack->scert_no,tCustomer.man_id); //身份证号 des2src(out_pack->sname,tCustomer.cut_name); //客户姓名 des2src(out_pack->sname2,tCustomer.lib_cardid); //图书证号 des2src(out_pack->sstatus0,tCustomer.sex); //性别 des2src(out_pack->sopen_emp,h_password); //卡密码 des2src(out_pack->sdate0,card_endtime); //有效截至日期 strcpy(out_pack->sorder0,CARD_STRUCT_VERSION); //制卡版本号 strcpy(out_pack->sorder1,CARD_REGISTER_PUBLISH_CODE); //发卡注册标识号 strcpy(out_pack->sorder2,CARD_REGISTER_SERVICE_CODE); //服务注册标识号 sprintf(out_pack->sholder_ac_no,"%ld",tCustomer.cut_id); //客户号 des2src(out_pack->sstat_type,tCustomer.man_idtype); //证件类型 des2src(out_pack->snation_code,tCustomer.country); //国籍 sprintf(out_pack->sstat_type2,"%d",tCustomer.nation); //民族 des2src(out_pack->sbranch_code0,tCustomer.school_code); //院校代码 out_pack->damt2=tradeserial.out_balance; //出卡值 out_pack->lserial1=tradeserial.serial_no; //流水号 PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F950029(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { CAccTrans *pAccTrans=CAccTrans::getInstance(); int ret=0; T_t_posdtl posdtl; memset(&posdtl,0,sizeof(posdtl)); des2src(posdtl.devphyid, rPack->sdate1); //物理设备ID ret=GetDeviceidByDevphyid(posdtl.devphyid,&(posdtl.termid)); if(ret) { if(ret!=ERRIF_POS_NOREG) return ret; } T_t_device tDevice; memset(&tDevice,0,sizeof(tDevice)); ret=DB_t_device_read_by_deviceid(posdtl.termid,&tDevice); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_DEVICE; else return E_DB_DEVICE_R; } des2src(posdtl.coldate,pAccTrans->trans.transdate); des2src(posdtl.coltime,pAccTrans->trans.transtime); posdtl.devseqno= rPack->lvol4; //上传端流水号 posdtl.transmark=rPack->lvol12; //999交易标记 posdtl.sysid = rPack->lcert_code; //上传工作站标识(前置机注册号) // posdtl.managefee= rPack->lvol11; // posdtl.cardno= rPack->lvol5; //交易卡号 posdtl.purseno = 0; posdtl.cardbefbal= rPack->lvol9/100.0; //入卡金额 posdtl.cardaftbal = rPack->lvol10/100.0; //出卡金额 posdtl.amount = rPack->lvol8/100.0; //本次消费金额 posdtl.cardcnt= rPack->lvol7; //当前卡中帐户消费次数(累计使用次数) snprintf(posdtl.transdate,9,"20%s",rPack->spost_code); //发生日期(格式化输入的日期) des2src(posdtl.transtime,rPack->spost_code2); //发生时间(格式化输入的时间) posdtl.status[0]='1'; if(strcmp(posdtl.transdate,"20000000") != 0) { ret=IsInvalidDateTime(posdtl.transdate,"YYYYMMDD"); if(ret) { posdtl.errcode=E_999_DATE;//上传流水交易日期有误 posdtl.status[0]='4'; } ret=IsInvalidDateTime(posdtl.transtime,"HHMMSS"); if(ret) { posdtl.errcode=E_999_TIME;//上传流水交易时间有误 posdtl.status[0]='4'; } } else { des2src(posdtl.transdate,posdtl.coldate); des2src(posdtl.transtime,posdtl.coltime); } //水控消费 T_t_purseposdtl purseposdtl; memset(&purseposdtl,0,sizeof(purseposdtl)); des2src(purseposdtl.coldate,posdtl.coldate); des2src(purseposdtl.coltime,posdtl.coltime); purseposdtl.devseqno= posdtl.devseqno; //上传端流水号 purseposdtl.transmark=posdtl.transmark; //999交易标记 purseposdtl.sysid = posdtl.sysid; //上传工作站标识(前置机注册号) des2src(purseposdtl.devphyid,posdtl.devphyid); purseposdtl.cardno= posdtl.cardno; //交易卡号 purseposdtl.pursetype= 4; //三九水控钱包号 purseposdtl.cardbefbal= posdtl.cardbefbal; //入卡金额 purseposdtl.cardaftbal= posdtl.cardaftbal; //出卡金额 purseposdtl.amount = posdtl.amount; //本次消费金额 purseposdtl.cardcnt= posdtl.cardcnt; //当前卡中帐户消费次数(累计使用次数) purseposdtl.status[0]=posdtl.status[0]; if(tDevice.devphytype == PHYTYPE_999_DEV) { des2src(purseposdtl.transdate,posdtl.coldate); des2src(purseposdtl.transtime,posdtl.coltime); } else { des2src(purseposdtl.transdate,posdtl.transdate); des2src(purseposdtl.transtime,posdtl.transtime); } g_dbchkerr=0; ret = DB_t_purseposdtl_add(&purseposdtl); if (ret) { g_dbchkerr=1; if(DB_REPEAT==ret) { return 0; } else { writelog(LOG_ERR,"serial_no[%d]cardno[%d]devphyid[%s]transdate[%s]transtime[%s]ret[%d]",posdtl.devseqno,posdtl.cardno,posdtl.devphyid,posdtl.transdate,posdtl.transtime,ret); return E_DB_PURSEPOSDTL_I; } } g_dbchkerr=1; return 0; }
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 DoCheck(ST_PACK *rPack,T_t_shopcard& tShopCard,T_t_shop& tShop) { //检查卡是否已经使用 int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; des2src(tShopCard.cardphyid,rPack->sbank_acc); des2src(tShopCard.showcardno,rPack->sorder0); des2src(tShopCard.expiredate,rPack->sdate0); des2src(tShopCard.opendate,trans.accdate); des2src(tShopCard.lastsaved,trans.sysdatetime); tShopCard.status[0]=STATUS_NORMAL; tShopCard.lossflag[0]='0'; tShopCard.shopid =rPack->lvol0; if(!strlen(tShopCard.cardphyid)) return E_INPUT_CARDPHYID; if(!strlen(tShopCard.expiredate)) return E_INPUT_EXPIREDATE; //判断到期日期 ret=IsInvalidDateTime(tShopCard.expiredate,"YYYYMMDD"); if (ret) return ERRINFO(E_INPUT_EXPIREDATE,tShopCard.expiredate); if (strncmp(tShopCard.expiredate,trans.accdate,8)<0) return ERRINFO(E_INPUT_EXPIREDATE,tShopCard.expiredate); //检查商户 ret=DB_t_shop_read_by_shopid(tShopCard.shopid,&tShop); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_SHOPID,tShopCard.shopid); else return E_DB_SHOPCARD_R; } if(tShop.status[0]!=STATUS_NORMAL) { return ERRINFO(E_SHOP_LOGOUT,tShop.shopid); } char cardpwd[33]={0}; char key[17]={0}; get_init_passwd_by_man_id(tShop.idno,cardpwd); strcpy(key,STATIC_SEED_KEY); EncodePwd(key,cardpwd,tShopCard.cardpwd, 0); strcpy(trans.cardpwd,cardpwd);//临时保存密码 //检查是否存在商户卡 T_t_shopcard tShopCardCheck; memset(&tShopCardCheck,0,sizeof(tShopCardCheck)); ret=DB_t_shopcard_read_by_shopid_and_status(tShopCard.shopid,tShopCard.status,&tShopCardCheck); if(ret) { if(DB_NOTFOUND!=ret) return E_DB_SHOPCARD_R; } else { ERRTIP("该商户商户卡已发行"); return E_COMMON_ERR; } ret=DB_t_shopcard_read_by_cardphyid_and_status(tShopCard.cardphyid,tShopCard.status,&tShopCardCheck); if (ret!=DB_NOTFOUND) { if (DB_SUCCESS==ret) return ERRINFO(E_EXIST_CARDPHYID,tShopCard.cardphyid); else return E_DB_CARD_R; } return 0; }
int F847228(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_AUTHCARDUPD; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; int auth_cardno = 0; T_t_authcard tAuthCard; T_t_operator tOper; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); double uni_no = 0.0; memset(&tAuthCard,0,sizeof tAuthCard); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); auth_cardno = rPack->lvol0; if(auth_cardno <= 0) { return E_INPUT_CARDNO; } if(strlen(rPack->scust_limit) == 0) { return E_INPUT_OPER_NULL; } if(IsInvalidDateTime(rPack->sdate0,"YYYYMMDD")) { return E_INPUT_DATE; } ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_AUTHCARD; else return E_DB_AUTHCARD_R; } if(tAuthCard.status[0] == STATUS_DELETE) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno); return E_AUTHCARD_LOGOUT; } if(tAuthCard.lossflag[0]== '1') { writelog(LOG_ERR,"auth card is loss , card id [%d]",tAuthCard.cardno); return E_AUTHCARD_IS_LOSS; } memset(&tOper,0,sizeof tOper); ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode); return E_DB_OPERATOR_N; } else return E_DB_OPERATOR_R; } if(tOper.status[0]==STATUS_DELETE) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode); return E_OPERLOGON_UNREG; } des2src(tAuthCard.expiredate,rPack->sdate0); tAuthCard.privilege = rPack->lvol1; ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno); return E_DB_AUTHCARD_U; } SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_SDATE0,F_SCUST_LIMIT,0); out_pack->lvol0 = tAuthCard.cardno; des2src(out_pack->sdate0,tAuthCard.expiredate); out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->scust_limit,tAuthCard.opercode); sprintf(trans.remark,"操作员[%s]授权卡卡号[%d]更新",tAuthCard.opercode,tAuthCard.cardno); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int UpdCardExpireDate(char *cardexpiredate,TRUSERID *handle,int *pRetCode,char *szMsg) { int ret=0; CAccTrans& ats=CAccTrans::GetInst(); TRANS& trans=ats.trans; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_c0_and_cardno(trans.cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",trans.cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno); else return E_DB_CARD_R; } trans.custid=tCard.custid; trans.cardtype=tCard.cardtype; trans.feetype=tCard.feetype; if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_LOGOUT,trans.cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.lossflag[0]) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_LOST,trans.cardno); } //比较卡物理ID是否相同 if(strcmp(tCard.cardphyid,trans.cardphyid)!=0) { DB_t_card_free_lock_by_c0(); return ERRINFO(E_CARD_PHYNO_DIFFER,trans.cardphyid,tCard.cardphyid); } ret=IsInvalidDateTime(cardexpiredate,"YYYYMMDD"); if(ret) return ret; if(strncmp(trans.accdate,cardexpiredate,8)>=0) return ERRINFO(E_CARD_EXPIREDATE,cardexpiredate,trans.accdate); des2src(tCard.expiredate,cardexpiredate); des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",tCard.cardno); if(DB_NOTFOUND==ret) return E_NOTEXIST_CARDNO; else return E_DB_CARD_U; } T_t_customer customer; memset(&customer,0,sizeof(customer)); if(tCard.custid) { ret=DB_t_customer_read_lock_by_cur_and_custid(tCard.custid,&customer); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CUSTOMER,tCard.custid); else return E_DB_CUSTOMER_R; } if(strncmp(customer.outdate,cardexpiredate,8)!=0) { des2src(customer.outdate,cardexpiredate); des2src(tCard.lastsaved,trans.sysdatetime); ret=DB_t_customer_update_lock_by_cur(&customer); if(ret) { return E_DB_CUSTOMER_U; } } else { DB_t_customer_free_lock_cur(); } } T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_ACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } trans.custid=tCard.custid; T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.cardbefbal=trans.cardbefbal; // transdtl.cardcnt=trans.cardcnt; transdtl.cardaftbal=trans.cardaftbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.totaltransamt; transdtl.custid=tCardAccount.custid; des2src(transdtl.showcardno,tCard.showcardno); des2src(transdtl.custname,customer.custname); des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL1,F_LSAFE_LEVEL2,F_LVOL4,F_LVOL5, F_SALL_NAME,F_SPAGER,F_SCERT_NO, F_SEMAIL2,F_SMARKET_CODE,F_SMARKET_CODE2,F_SDATE0, F_LVOL0,F_STX_PWD,F_LVOL8,F_LVOL6, F_SORDER0,F_SEMP,F_LVOL11,F_LVOL12, F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,F_STIME3,F_SDATE3,0); outPack->lvol1=customer.custid; outPack->lsafe_level2=customer.custtype; outPack->lvol5=tCard.feetype; des2src(outPack->sall_name,customer.custname); des2src(outPack->spager,customer.stuempno); des2src(outPack->scert_no,customer.deptcode); des2src(outPack->smarket_code2,customer.idtype); des2src(outPack->semail2,customer.idno); des2src(outPack->smarket_code,customer.sex); des2src(outPack->sdate0,tCard.expiredate); outPack->lvol0=tCard.cardno; outPack->lvol8=D4U5(transdtl.cardaftbal*100,0); outPack->lvol11=D4U5(tCardAccount.singlemaxamt*100,0); outPack->lvol12=D4U5(tCardAccount.daycostmaxamt*100,0); outPack->lvol6=tCardAccount.paycnt; // outPack->lvol4=tCardAccount.subsidyno; des2src(outPack->sorder0,tCard.showcardno); des2src(outPack->sdate3,ats.trans.accdate); des2src(outPack->stime3,ats.trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; // des2src(outPack->vsmess,ats.remark.c_str()); PutRow(handle,outPack,pRetCode,szMsg); return 0; }