static void GenTradeResMsgBody(char *msgbody,INFO_TRADE &info_trade) { char buf[1024]=""; AddXmlItemStr(buf, "SchoolCode", info_trade.SchoolCode); AddXmlItemStr(buf, "CusName", info_trade.CusName); AddXmlItemDbl(buf, "ICCardNotWrt", info_trade.ICCardNotWrt); AddXmlItemStr(buf, "ReMark",""); AddXmlItemStr(msgbody, "MsgBody", buf); // 全包含在MsgBody 中 }
static void GenMsgBodyQuery(char *msgbody,ST_PACK *rPack) { char buf[1024]=""; AddXmlItemStr(buf, "SchoolCode", SCHOOLCODE_AHUT); //学校代码 AddXmlItemStr(buf, "IcCard", rPack->sphone); //校园卡卡号(使用学工号) AddXmlItemInt(buf, "SignFlag", 1); //签约标志 AddXmlItemStr(buf, "ActNo", rPack->scust_limit2); // 银行卡号 AddXmlItemStr(msgbody, "MsgBody", buf); //全包含在MsgBody 中 writelog(LOG_DEBUG,"msgbody[%s] ",msgbody); }
// 冲正包体 static void GenMsgBodyTransRev(char *msgbody,ST_PACK *rPack) { char buf[1024]=""; AddXmlItemStr(buf, "SchoolCode", SCHOOLCODE_AHUT); //学校代码 AddXmlItemStr(buf, "IcCard", rPack->sphone); //校园卡卡号(使用学工号) AddXmlItemDbl(buf, "Amount", rPack->damt0); // 交易金额 AddXmlItemStr(buf, "RSeqNo", rPack->sholder_ac_no); //交易流水号 AddXmlItemStr(msgbody, "MsgBody", buf); //全包含在MsgBody 中 writelog(LOG_DEBUG,"msgbody[%s] ",msgbody); }
static void GenMsgHead(char *msghead,ST_PACK *rPack) { char buf[1024]=""; AddXmlItemStr(buf,"AreaNo",""); //地区代码 AddXmlItemStr(buf,"ChanNo",""); //渠道代码 AddXmlItemInt(buf, "TerminalNo", rPack->lvol6); //终端编号 AddXmlItemStr(buf,"TransNo",rPack->sholder_ac_no); //交易流水号 AddXmlItemStr(buf,"TransDate",rPack->sdate0); //交易日期 AddXmlItemStr(buf,"TransTime",rPack->stime0); //交易时间 AddXmlItemStr(buf,"BankNo",""); //机构代码 AddXmlItemStr(buf,"TellerNo",""); //柜员代码 AddXmlItemInt(buf, "FuncTionFlag", 1); //处理标志 AddXmlItemStr(msghead, "MsgHead", buf); // 全包含在MsgHead 中 writelog(LOG_DEBUG,"msghead[%s] ",msghead); }
int F930103(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; T_t_tif_meslist tMesList; memset(&tMesList,0,sizeof(tMesList)); des2src(tMesList.devphy999_id, in_pack->sdate0); trim(tMesList.devphy999_id); if(strlen(tMesList.devphy999_id)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemStr(tMesList.incontent,XML_KEY_DEV999_ID,tMesList.devphy999_id); AddXmlItemInt(tMesList.incontent,XML_KEY_WORKMODE, in_pack->lvol3); AddXmlItemInt(tMesList.incontent,XML_KEY_LOCK1_TIME, in_pack->lvol5); AddXmlItemInt(tMesList.incontent,XML_KEY_LOCK2_TIME, in_pack->lvol6); AddXmlItemStr(tMesList.incontent,XML_KEY_IS_ALLEYWAY, in_pack->sstatus0); AddXmlItemStr(tMesList.incontent,XML_KEY_IS_SAVE, in_pack->sstatus1); AddXmlItemStr(tMesList.incontent,XML_KEY_IS_LCD, in_pack->sstatus2); AddXmlItemStr(tMesList.incontent,XML_KEY_SYSPWD, in_pack->semp_pwd); AddXmlItemInt(tMesList.incontent,XML_KEY_BAUDRATE, 0); AddXmlItemInt(tMesList.incontent,XML_KEY_CARDSTR, 100); tMesList.funid = iRequest; tMesList.level =1; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } return 0; L_RETU: return -1; }
static void GenBindResMsgBody(char *msgbody,INFO_BIND &info_bind) { char buf[1024]=""; AddXmlItemStr(buf, "SchoolCode", info_bind.SchoolCode); AddXmlItemStr(buf, "TrType", info_bind.TrType); AddXmlItemStr(buf, "CusName", info_bind.CusName); AddXmlItemStr(buf, "IcCard", info_bind.IcCard); AddXmlItemStr(buf, "ReMark",""); AddXmlItemStr(msgbody, "MsgBody", buf); // 全包含在MsgBody 中 }
int F930109(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; T_t_tif_meslist tMesList; T_t_pif_device tDevice; memset(&tDevice,0,sizeof tDevice); memset(&tMesList,0,sizeof(tMesList)); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemInt(tMesList.incontent,XML_KEY_OUTNUM,in_pack->lvol5); //条数 AddXmlItemStr(tMesList.incontent,XML_KEY_HOLIDAY,in_pack->vsvarstr0); //节假日 //FIXME //需要查询节假日表下传 //FIXME if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMesList.devid = tDevice.device_id; tMesList.funid = 930109; tMesList.level =1; tMesList.max_send_cnt = 10; ret = DB_t_tif_meslist_del_by_devid_and_funid(tMesList.devid,tMesList.funid); if(ret) { if(DB_NOTFOUND != ret) { return E_DB_MESLIST_D; } } ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } return 0; L_RETU: return -1; }
int F930201(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret; T_t_tif_meslist tMeslist; T_t_device tDevice; memset(&tDevice,0,sizeof tDevice); memset(&tMeslist,0,sizeof tMeslist); if(strlen(in_pack->sdate0) != 8) { return E_DEVPHYID_NULL; } tMeslist.funid = 930201; tMeslist.level = 2; tMeslist.max_send_cnt = 10; tMeslist.del_flag[0] = '0'; AddXmlItemStr(tMeslist.incontent,XML_KEY_DEVPHY999_NO,in_pack->sdate0); if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMeslist.devid = tDevice.deviceid; ret = DB_t_tif_meslist_del_by_devid_and_funid(tMeslist.devid,tMeslist.funid); if(ret) { if(ret != DB_NOTFOUND) { *pRetCode = E_DB_MESLIST_D; goto L_RETU; } } ret = AddMsgLst(&tMeslist); if(ret) { writelog(LOG_ERR,"add message list 930201 error!"); *pRetCode = E_DB_MESLIST_I; goto L_RETU; } return 0; L_RETU: return -1; }
int F930011(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; T_t_tif_meslist tMesList; T_t_pif_device tDevice; memset(&tMesList,0,sizeof(tMesList)); memset(&tDevice,0,sizeof(tDevice)); if(strlen(in_pack->sdate0) == 0 ) { *pRetCode = E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemStr(tMesList.incontent, XML_KEY_CONCODEVER, in_pack->sserial2); AddXmlItemInt(tMesList.incontent, XML_KEY_CONCODE, in_pack->lvol4); if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMesList.devid = tDevice.device_id; tMesList.funid = 930011; tMesList.level = 2; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } return 0; L_RETU: return -1; }
static void GenResMsgHead(char *msghead,char *refno,int errcode,char *errmsg) { char buf[1024]=""; char sysdate[9]=""; char systime[7]=""; getsysdate(sysdate); getsystime(systime); AddXmlItemStr(buf,"AreaNo",""); //地区代码 AddXmlItemStr(buf,"ChanNo",""); //渠道代码 if(refno != NULL) AddXmlItemStr(buf,"TransNo",refno); //交易流水号 else AddXmlItemStr(buf,"TransNo",""); AddXmlItemStr(buf,"TransDate",sysdate); //交易日期 AddXmlItemStr(buf,"TransTime",systime); //交易时间 AddXmlItemStr(buf,"BankNo",""); //机构代码 AddXmlItemStr(buf,"TellerNo",""); //柜员代码 AddXmlItemInt(buf, "FuncTionFlag", 1); //处理标志 if(errcode!=0) AddXmlItemInt(buf, "ResultCode", errcode); else AddXmlItemStr(buf, "ResultCode", "0000"); AddXmlItemStr(buf, "Err_Info", errmsg); AddXmlItemStr(msghead, "MsgHead", buf); // 全包含在MsgHead 中 }
int F930063(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int msgid=0; T_t_msglist tMsgList; T_t_device tDevice; memset(&tDevice,0,sizeof tDevice); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMsgList,0,sizeof(tMsgList)); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemStr(tMsgList.reqdata, XML_KEY_ADMPWD, in_pack->semp_pwd); if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMsgList.deviceid = tDevice.deviceid; tMsgList.funcno = 930063; tMsgList.msglevel = 2; ret=AddMsgLst(&tMsgList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMsgList.funcno) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } msgid=tMsgList.msgid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0; (cnt<10)&&(tMsgList.errcode!=0); cnt++) { sleep(1); memset(&tMsgList,0,sizeof(tMsgList)); ret=DB_t_msglist_read_by_msgid(msgid, &tMsgList); if(ret) { writelog(LOG_ERR,"DB_t_msglist_read_by_msgid err[%d]",ret); *pRetCode=E_DB_MSGLIST_R; goto L_RETU; } } switch(tMsgList.errcode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMsgList.errmsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F930105(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; T_t_device tDevice; memset(&tDevice,0,sizeof tDevice); T_t_msglist tMsgList; memset(&tMsgList,0,sizeof(tMsgList)); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } if(in_pack->lvol3<1||in_pack->lvol3>8) { *pRetCode=E_INPUT_DATA_INVAILD; goto L_RETU; } if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice))) { *pRetCode = ret; goto L_RETU; } tMsgList.deviceid = tDevice.deviceid; ret = process930105(tDevice.deviceid,in_pack->lvol3); if(ret) { *pRetCode = ret; goto L_RETU; } AddXmlItemInt(tMsgList.reqdata,XML_KEY_WEEKNO,in_pack->lvol3); //星期 AddXmlItemInt(tMsgList.reqdata,XML_KEY_OUTNUM,in_pack->lvol5); //记录数 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME1,in_pack->saddr); //时间段1 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME2,in_pack->saddr2); //时间段2 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME3,in_pack->sall_name); //时间段3 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME4,in_pack->snote); //时间段4 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME5,in_pack->snote2); //时间段5 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME6,in_pack->scert_addr); //时间段6 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME7,in_pack->sbankname); //时间段7 AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME8,in_pack->sbankname2); //时间段8 //FIXME //需要查询时间段表下传 //FIXME //tMsgList.funcno = iRequest; tMsgList.funcno=930105; tMsgList.pfuncno = 930105; tMsgList.msglevel = MESLIST_PRIORITY_REALTIME; // 重试10次 tMsgList.maxsendcnt = 10; ret=AddMsgLst(&tMsgList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } return 0; L_RETU: return -1; }
//圈存机写卡失败冲正(实际并不冲正,只是改写卡状态) int Pos_WriteErrCard(INNER_TRANS_REQUEST * pNode) { int ret = 0; int card_id = 0; char logicdate[11]=""; int serial_no=0; T_t_pif_card card; T_t_tif_tradeserial tradeserial; INNER_TRANS_REQUEST from_pos; memset(&tradeserial,0,sizeof(tradeserial)); memset(&from_pos,0,sizeof(from_pos)); memset(&card,0,sizeof(card)); memcpy(&from_pos,pNode,sizeof(from_pos)); ret=GetLogicDate(logicdate); //业务日期 if(ret) { db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ALERT,"GetLogicDate err,sqlcode[%d]",ret); return E_TRANS_UNKNOW_ERROR; } serial_no=from_pos.RecvNo; ret=DB_t_tif_tradeserial_read_by_serial_no(serial_no,&tradeserial); if(ret) { db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ALERT,"DB_t_tif_tradeserial_read_by_serial_no err,sqlcode[%d]",ret); return E_TRANS_UNKNOW_ERROR; } //修改原卡状态为发卡写卡失败状态 card_id = tradeserial.card_id; ret=DB_t_pif_card_read_lock_by_cur_and_card_id(card_id, &card); if(ret) { db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ALERT,"DB_t_pif_card_read_lock_by_cur_and_card_id err,sqlcode[%d]",ret); return E_TRANS_UNKNOW_ERROR; } card.state_id[CARDSTAT_TYPE_WFAIL]=STATE_TRUE; memset(card.comments,0,sizeof(card.comments)); AddXmlItemStr(card.comments, XML_KEY_OPERATEDATE,logicdate); AddXmlItemInt(card.comments,XML_KEY_SERIALNO,serial_no); AddXmlItemInt(card.comments,XML_KEY_TRADECODE,TRADE_INNER_TRANS); ret=DB_t_pif_card_update_lock_by_cur(&card); if(ret) { db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ALERT,"DB_t_pif_card_update_lock_by_cur err,sqlcode[%d]",ret); return E_TRANS_UNKNOW_ERROR; } DB_t_pif_card_free_lock_by_cur(); writelog(LOG_INFO,"update card status succeed!"); return 0; }
int F930007(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int mesid=0; T_t_tif_meslist tMesList; T_t_pif_device tDevice; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMesList,0,sizeof(tMesList)); memset(&tDevice,0,sizeof(tDevice)); des2src(tMesList.devphy999_id, in_pack->sdate0); trim(tMesList.devphy999_id); if(strlen(tMesList.devphy999_id)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } ret=get_devinfo_by_phyid(tMesList.devphy999_id,&tDevice); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"get_devinfo_by_phyid err[%d]",ret); goto L_RETU; } AddXmlItemInt(tMesList.incontent, XML_KEY_DEV999_NO, tDevice.dev999_no); //机号 AddXmlItemStr(tMesList.incontent, XML_KEY_DEV999_ID, tDevice.dev999_id); //注册号 AddXmlItemInt(tMesList.incontent, XML_KEY_BAUDRATE, tDevice.baudrate); //波特率 AddXmlItemStr(tMesList.incontent, XML_KEY_SYSPWD, tDevice.syspwd); //系统员密码 AddXmlItemStr(tMesList.incontent, XML_KEY_ADMPWD,tDevice.admpwd); //管理员密码 AddXmlItemInt(tMesList.incontent, XML_KEY_PWDONOFF,tDevice.pwdonoff); //密码开关 AddXmlItemStr(tMesList.incontent, XML_KEY_CARDSTR, "100"); //卡片结构 AddXmlItemInt(tMesList.incontent, XML_KEY_CARDUSENUM,tDevice.cardusenum); //卡的最大使用次数\允许最大消费次数 AddXmlItemInt(tMesList.incontent, XML_KEY_MAXDEPOSIT, tDevice.maxdeposit); //钱包最高存款限额 AddXmlItemInt(tMesList.incontent, XML_KEY_MINDEPOSIT, tDevice.mindeposit); //钱包最低剩余款限额 AddXmlItemInt(tMesList.incontent, XML_KEY_RATION, tDevice.ration); //定值收费方式使用的定值额\定值金额 AddXmlItemStr(tMesList.incontent, XML_KEY_PUSERNO, tDevice.puserno); //钱包代码\钱包号 AddXmlItemInt(tMesList.incontent, XML_KEY_MAXTRADE, tDevice.maxtrade); //每次交易最高额\大额消费限额 AddXmlItemStr(tMesList.incontent, XML_KEY_VCARDSET, tDevice.cardtype); //终端机适用用户卡类别 AddXmlItemStr(tMesList.incontent, XML_KEY_FUNONOFF, tDevice.funonoff); //收费机增强功能开关 AddXmlItemInt(tMesList.incontent, XML_KEY_FEETYPE, tDevice.feetype); //收费方式 tMesList.funid = 930007; tMesList.level = 2; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMesList.funid) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } mesid=tMesList.mesid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++) { sleep(1); memset(&tMesList,0,sizeof(tMesList)); ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList); if(ret) { writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret); *pRetCode=E_DB_MESLIST_R; goto L_RETU; } } switch(tMesList.ecode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMesList.emsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F849014(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret=0; int card_id = 0; T_t_pif_card tCard; char buf[64] = ""; char comments[256] = ""; char reqdata[1024] = ""; char temp[1024] = ""; ST_CPACK aPack; ST_PACK* out_pack = &(aPack.pack); char svr_ip[21 ] = ""; int svr_port = 0; CTcpSocket sock; KSG_GW_PACK_t * resp = NULL; if(strlen(in_pack->sname) < 1) { *pRetCode = E_INPUT_DORM_NO; goto L_RETU; } ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSMESS,0); ret = GetPowerServerInfo(svr_ip,&svr_port); if(ret) { *pRetCode = ret; goto L_RETU; } gw_server_info_t svrinfo; des2src(svrinfo.server_ip,svr_ip); svrinfo.server_port = svr_port; svrinfo.sock = &sock; AddXmlItemStr(temp,XML_KEY_DORM_NO,in_pack->sname); writelog(LOG_DEBUG,"xml[%s]",temp); sprintf(reqdata,"<YKT_DATA>%s</YKT_DATA>",temp); writelog(LOG_DEBUG,"xml[%s]",reqdata); ret = SendToServer(&svrinfo,QUERY_DORM_NAME,reqdata); if(ret) { writelog(LOG_DEBUG,"电控返回数据[%d]",ret); *pRetCode =ret; goto L_RETU; } ret = RecvFromServer(&svrinfo,&resp); if(ret) { writelog(LOG_DEBUG,"电控返回数据[%d]",ret); *pRetCode = ret; goto L_RETU; } else { if(resp->func_no != QUERY_DORM_NAME || resp->retcode != 0) { writelog(LOG_DEBUG,"funcno [%d] ret[%d]",resp->func_no,resp->retcode); *pRetCode = E_POWER_RECV_ERR; goto L_RETU; } des2src(reqdata,resp->data); ret = GetXmlValue(comments,sizeof comments,XML_KEY_DORM_NAME,reqdata); if(ret) { writelog(LOG_DEBUG,"无数据[%s][%d]",reqdata,ret); *pRetCode = ret; goto L_RETU; } des2src(out_pack->vsmess,comments); PutRow(handle,out_pack,pRetCode,szMsg); } if(resp) free(resp); return 0; L_RETU: if(resp) free(resp); return -1; }
int F930005(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int mesid=0; char sCardState[5]=""; T_t_tif_meslist tMesList; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMesList,0,sizeof(tMesList)); // des2src(tMesList.devphy999_id, in_pack->sdate0); ret=GetCardState(in_pack->lvol0,sCardState); if (ret) { *pRetCode = ret; goto L_RETU; } if('2'==sCardState[CARDSTAT_TYPE_REG]) { *pRetCode = E_CARDNO_LOGOUT; goto L_RETU; } AddXmlItemInt(tMesList.incontent, XML_KEY_CARDID,in_pack->lvol0); AddXmlItemStr(tMesList.incontent, XML_KEY_VERNUM, in_pack->sserial0); AddXmlItemInt(tMesList.incontent, XML_KEY_ADDDELSIGN,in_pack->lvol4); //增删标志 tMesList.funid = 930005; tMesList.level = 0; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=930005) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } mesid=tMesList.mesid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++) { sleep(1); memset(&tMesList,0,sizeof(tMesList)); ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList); if(ret) { writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret); *pRetCode=E_DB_MESLIST_R; goto L_RETU; } } switch(tMesList.ecode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMesList.emsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847108(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int card_id = 0; char logicdate[11]=""; T_t_pif_card card; memset(&card,0,sizeof(card)); ret=GetLogicDate(logicdate); //业务日期 if(ret) { *pRetCode=ret; goto L_RETU; } //修改原卡状态为发卡写卡失败状态 card_id = in_pack->lvol0; if(in_pack->lvol0<1) { writelog(LOG_ERR,"in_pack->lserial1[%d]",in_pack->lvol0); *pRetCode=E_INPUT_CARDNO; goto L_RETU; } if(in_pack->lserial1<1) { writelog(LOG_ERR,"in_pack->lserial1[%d]",in_pack->lserial1); *pRetCode= E_INPUT_SERIALNO; goto L_RETU; } ret=DB_t_pif_card_read_lock_by_cur_and_card_id(card_id, &card); 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; } card.state_id[CARDSTAT_TYPE_WFAIL]=STATE_TRUE; memset(card.comments,0,sizeof(card.comments)); AddXmlItemStr(card.comments, XML_KEY_OPERATEDATE,logicdate); AddXmlItemInt(card.comments,XML_KEY_SERIALNO,in_pack->lserial1); AddXmlItemInt(card.comments,XML_KEY_TRADECODE,in_pack->lvol2); ret=DB_t_pif_card_update_lock_by_cur(&card); 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(); return 0; L_RETU: return -1; }
int F930013(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int mesid=0; T_t_tif_meslist tMesList; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMesList,0,sizeof(tMesList)); des2src(tMesList.devphy999_id, in_pack->sdate0); trim(tMesList.devphy999_id); if(strlen(tMesList.devphy999_id)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } AddXmlItemStr(tMesList.incontent, XML_KEY_STARTDT, in_pack->sopen_emp); AddXmlItemStr(tMesList.incontent, XML_KEY_ENDDT, in_pack->sclose_emp); AddXmlItemInt(tMesList.incontent, XML_KEY_RATION, in_pack->lvol4); AddXmlItemInt(tMesList.incontent, XML_KEY_CARDUSENUM, in_pack->lvol5); AddXmlItemStr(tMesList.incontent, XML_KEY_VCARDSET, in_pack->snote2); tMesList.funid = 930013; tMesList.level = 2; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMesList.funid) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } mesid=tMesList.mesid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++) { sleep(1); memset(&tMesList,0,sizeof(tMesList)); ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList); if(ret) { writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret); *pRetCode=E_DB_MESLIST_R; goto L_RETU; } } switch(tMesList.ecode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMesList.emsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F950040(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret,i,j; T_t_device tDevice; T_t_msglist tMsg; int retries = 0; int msgid; char cardgroup[257] = ""; unsigned char out_data[128] = ""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tDevice,0,sizeof tDevice); if(rPack->lcert_code < 1) { return E_NOTEXIST_DEVICE; } if(strlen(rPack->vsvarstr0) != 254) { writelog(LOG_DEBUG,"card right [%s] ",rPack->vsvarstr0); return E_DEVICE_PARAM_ERR; } if((ret = DB_t_device_read_by_deviceid(rPack->lcert_code,&tDevice))) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_DEVICE,rPack->lcert_code); else return E_DB_DEVICE_R; } if(tDevice.status[0]!=STATUS_NORMAL) { return ERRINFO(E_NOTEXIST_DEVICE,tDevice.devphyid); } memset(&tMsg,0,sizeof tMsg); //cardgroup[0] = '0'; strcpy(cardgroup,rPack->vsvarstr0); cardgroup[254] = '0'; for(i = 0;i < 255;i+=8) { out_data[i/8] = 0; for(j = 0;j < 8;++j) { unsigned char t = (*(cardgroup+i+j) == '1') ? 1 : 0; out_data[i/8] |= (t << (7-j)); } } memset(cardgroup,0,sizeof cardgroup); for(i = 0,j = 0;i < 256 / 8;++i,j+=2) { sprintf(cardgroup+j,"%02X",out_data[i]); } cardgroup[256/4] = '\0'; tMsg.funcno = 950040; tMsg.msglevel=1; tMsg.maxsendcnt = 1; //des2src(tMsg.devphyid,tDevice.devphyid); tMsg.deviceid= tDevice.deviceid; AddXmlItemStr(tMsg.reqdata,XML_KEY_CARDRIGHTTYPE,cardgroup); if((ret = AddMsgLst(&tMsg))) { return ret; } strcpy(out_pack->vsvarstr0,"成功"); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F950041(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; T_t_pif_device tDevice; T_t_cif_shop_pos tShopPos; T_t_cif_shop tShop; T_t_tif_meslist tMsg; T_t_pif_feetype tFeeType; int rate = 0; int retries = 0; int msgid; unsigned char buf[32] = ""; char cardlist[100] = ""; int rows = 0; int i,j; memset(&tDevice,0,sizeof tDevice); memset(&tFeeType,0,sizeof tFeeType); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,F_VSMESS,0); if(rPack->lcert_code < 1) { *pRetCode = E_DEVICE_NOT_EXIST; } else if((ret = DB_t_pif_device_read_by_device_id(rPack->lcert_code,&tDevice))) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_DEVICE_N; else *pRetCode = E_DB_DEVICE_R; } else if(tDevice.state_id == DEVISTAT_LOGOUT) { *pRetCode = E_DEVICE_NOT_EXIST; } // 如果是 39 的充值机 else if(strcmp(tDevice.devtype,"0201") == 0 && tDevice.phytype == 1000) { des2src(rPack->sdate0,tDevice.devphy999_id); ret = F930006(handle,iRequest,rPack,pRetCode,szMsg); if(ret) { goto LRet; } return 0; } else if((ret = DB_t_cif_shop_pos_open_select_by_c0_and_device_id(rPack->lcert_code))) { *pRetCode = E_DB_SHOP_POS_R; } else { while(1) { memset(&tShopPos,0,sizeof tShopPos); memset(&tShop,0,sizeof tShop); if((ret = DB_t_cif_shop_pos_fetch_select_by_c0(&tShopPos))) { if(ret == DB_NOTFOUND) { writelog(LOG_DEBUG,"shop doesn't find [%d]!"); *pRetCode = 0; } else *pRetCode = E_DB_SHOP_POS_R; break; } writelog(LOG_DEBUG,"find shop [%d]",tShopPos.shop_id); if((ret = DB_t_cif_shop_read_by_shop_id(tShopPos.shop_id,&tShop))) { *pRetCode = ret; break; } if('1' == tShop.is_leaf[0] && '1' == tShop.is_getfee[0] && amtcmp(tShop.ratio,0.00)>0 ) { writelog(LOG_DEBUG,"shop rate [%.02f]",tShop.ratio); int newrate = D2I(tShop.ratio * 100); if(newrate > rate) rate = newrate; } } } if(*pRetCode) return -1; ret = DB_t_pif_feetype_open_select_by_cur1(); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_FEETYPE_N; else *pRetCode = E_DB_FEETYPE_R; return -1; } memset(buf,0,sizeof buf); while(1) { memset(&tFeeType,0,sizeof &tFeeType); ret = DB_t_pif_feetype_fetch_select_by_cur1(&tFeeType); if(ret) { if(DB_NOTFOUND == ret) { if(rows > 0) break; *pRetCode = E_DB_FEETYPE_N; } else *pRetCode = E_DB_FEETYPE_R; } rows++; if(tFeeType.fee_type < 0 || tFeeType.fee_type > 255 || tFeeType.is_outfee[0] != '1' ) continue; writelog(LOG_DEBUG,"fee[%s][%d][%c]",tFeeType.fee_name,tFeeType.fee_type ,tFeeType.is_outfee[0]); _SET_BIT(buf,tFeeType.fee_type-1); } //writelog(LOG_DEBUG,"bit length %d",BIT_LENGTH); memset(&tMsg,0,sizeof tMsg); tMsg.funid = 950041; tMsg.level = 1; tMsg.devid = tDevice.device_id; for(i = 0,j = 0;i < sizeof buf;++i) { j += sprintf(cardlist+j,"%02x",buf[i]); } AddXmlItemInt(tMsg.incontent,XML_KEY_FEE,rate); AddXmlItemStr(tMsg.incontent,XML_KEY_CARDRIGHTTYPE,cardlist); tMsg.max_send_cnt = 5; if((ret = AddMsgLst(&tMsg))) { *pRetCode = ret; } else { if(db_commit()) { *pRetCode = E_DB_COMMIT; return -1; } retries = 10; msgid = tMsg.mesid; for(retries=0;(retries<10)&&(tMsg.ecode!=0);retries++) { memset(&tMsg,0,sizeof tMsg); ret = DB_t_tif_meslist_read_by_mesid(msgid,&tMsg); if(ret) { strcpy(out_pack->vsvarstr0,"读取指令失败"); *pRetCode=E_DB_MESLIST_R; strcpy(szMsg,"读取指令失败"); return -1; } // 等待1秒 sleep(1); } switch(tMsg.ecode) { case 0: //成功 des2src(out_pack->vsmess,"成功"); strcpy(szMsg,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsmess,"前置机无应答"); strcpy(szMsg,"前置机无应答"); goto LRet; default: //交易已经处理,但结果是失败 des2src(out_pack->vsmess,tMsg.emsg); goto LRet; } PutRow(handle,out_pack,pRetCode,szMsg); AnswerData(handle,*pRetCode,szMsg); return 0; } LRet: return -1; }
int DoFrozeCard(int cardno) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(cardno,&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,cardno); else return E_DB_CARD_R; } des2src(trans.showcardno,tCard.showcardno); if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,cardno); } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_FREEZE,cardno); } tCard.frozeflag[0]='1'; des2src(tCard.frozedate,trans.sysdate); ret=getCardVerNo(tCard.cardverno); if(ret) { DB_t_card_free_lock_by_cur(); return ret; } getfmtsysdatetime(tCard.lastsaved); ret=DB_t_card_update_lock_by_cur(&tCard); if(ret) { writelog(LOG_ERR,"cardno[%d]",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_by_custid(tCard.custid,&customer); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_CUSTOMER; else return E_DB_CUSTOMER_R; } trans.custid=tCard.custid; des2src(trans.custname,customer.custname); } //修改以前的解冻记录为删除状态 UpdCardVerStatus(cardno,CARDVERTYPE_CARDUNFROZE); //更新系统黑名单最大版本号 ret=SetSysParaVal(SYSPARA_MAXBLACKCARDVERNO,tCard.cardverno); if(ret) { return ret; } T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.sysdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.cardno=tCard.cardno; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,customer.stuempno); cardver.cardvertype=CARDVERTYPE_CARDFROZE; cardver.adddelflag[0]=ADDDELFLAG_ADD; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardverno,tCard.cardverno); ret=DB_t_cardver_add(&cardver); if(ret) { if(DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } T_t_msglist tMsgList; memset(&tMsgList,0,sizeof(tMsgList)); AddXmlItemInt(tMsgList.reqdata, XML_KEY_CARDID,tCard.cardno); AddXmlItemStr(tMsgList.reqdata, XML_KEY_VERNUM,tCard.cardverno); AddXmlItemInt(tMsgList.reqdata, XML_KEY_ADDDELSIGN,0); //增删标志 tMsgList.funcno = 930005; tMsgList.pfuncno = 846307; tMsgList.msglevel = MESLIST_PRIORITY_REALTIME; tMsgList.msgtype = MESLIST_TYPE_ORDER; ret=AddMsgLst(&tMsgList); if(ret) { writelog(LOG_ERR,"AddMsgLst err[%d]",ret); return ret; } des2src(trans.summary,cardver.cardverno); return 0; }
int F930021(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) { int ret = 0; int cnt=0; int mesid=0; T_t_tif_meslist tMesList; T_t_pif_device tDevice; T_t_pif_device tPDev; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tMesList,0,sizeof(tMesList)); memset(&tDevice,0,sizeof(tDevice)); memset(&tPDev,0,sizeof tPDev); if(strlen(in_pack->sdate0)==0) { *pRetCode=E_DEVPHYID_NULL; goto L_RETU; } ret=get_devinfo_by_phyid(in_pack->sdate0,&tDevice); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"get_devinfo_by_phyid err[%d]",ret); goto L_RETU; } if((ret = get_devinfo_by_phyid(tDevice.fdev_id,&tPDev))) { *pRetCode = ret; goto L_RETU; } AddXmlItemStr(tMesList.incontent,XML_KEY_DEV999_ID, tDevice.dev999_id); AddXmlItemInt(tMesList.incontent,XML_KEY_DEV999_NO, tDevice.dev999_no); AddXmlItemStr(tMesList.incontent,XML_KEY_DEVTYPE,tDevice.devtype); AddXmlItemStr(tMesList.incontent,XML_KEY_DEVVERSION, tDevice.devversion); AddXmlItemStr(tMesList.incontent,XML_KEY_CARDSTR, tDevice.cardstr); AddXmlItemStr(tMesList.incontent,XML_KEY_VCARDSET, tDevice.cardtype); AddXmlItemInt(tMesList.incontent, XML_KEY_PORTCOUNT, tDevice.portcount); AddXmlItemStr(tMesList.incontent, XML_KEY_FDEVPHY_ID, tPDev.dev999_id); AddXmlItemInt(tMesList.incontent, XML_KEY_PORTNO,tDevice.portno); AddXmlItemInt(tMesList.incontent, XML_KEY_STATE_ID, tDevice.state_id); AddXmlItemInt(tMesList.incontent,XML_KEY_JOINMODE,tDevice.joinmode); AddXmlItemStr(tMesList.incontent, XML_KEY_COMADD, tDevice.comadd); AddXmlItemStr(tMesList.incontent, XML_KEY_PORT, tDevice.port); AddXmlItemInt(tMesList.incontent, XML_KEY_BAUDRATE, tDevice.baudrate); AddXmlItemInt(tMesList.incontent, XML_KEY_COMTYPE,tDevice.comtype); AddXmlItemStr(tMesList.incontent, XML_KEY_NOTVALIDITY, tDevice.bsheetvdate); AddXmlItemStr(tMesList.incontent, XML_KEY_VERNUM,tDevice.bsheetver); AddXmlItemInt(tMesList.incontent, XML_KEY_LASTTRASERNO, tDevice.lasttraserno); AddXmlItemStr(tMesList.incontent, XML_KEY_LASTTRADATE, tDevice.lasttradate); AddXmlItemInt(tMesList.incontent, XML_KEY_LASTSHUTSERNO, tDevice.lastshutserno); AddXmlItemStr(tMesList.incontent, XML_KEY_LASTSHUTDATE, tDevice.lastshutdate); tMesList.devid = tDevice.device_id; tMesList.funid = 930021; tMesList.level = 3; ret=AddMsgLst(&tMesList); if(ret) { *pRetCode=ret; writelog(LOG_ERR,"AddMsgLst err[%d]",ret); goto L_RETU; } if(iRequest!=tMesList.funid) return 0; ret=db_commit(); if(ret) { writelog(LOG_ERR,"db_commit ret[%d]",ret); *pRetCode=E_DB_COMMIT; goto L_RETU; } mesid=tMesList.mesid; des2src(out_pack->sdate0,in_pack->sdate0); for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++) { sleep(1); memset(&tMesList,0,sizeof(tMesList)); ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList); if(ret) { writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret); *pRetCode=E_DB_MESLIST_R; goto L_RETU; } } switch(tMesList.ecode) { case 0: //成功 des2src(out_pack->vsvarstr0,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsvarstr0,"前置机无应答"); break; default: //交易已经处理,但结果是失败 des2src(out_pack->vsvarstr0,tMesList.emsg); break; } PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F950040(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret,i,j; T_t_pif_device tDevice; T_t_tif_meslist tMsg; int retries = 0; int msgid; char cardgroup[257] = ""; char out_data[128] = ""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,0); memset(&tDevice,0,sizeof tDevice); if(rPack->lcert_code < 1) { *pRetCode = E_DEVICE_NOT_EXIST; } else if(strlen(rPack->vsvarstr0) != 254) { writelog(LOG_DEBUG,"card right [%s] ",rPack->vsvarstr0); *pRetCode = E_DEVICE_PARAM_ERR; } else if((ret = DB_t_pif_device_read_by_device_id(rPack->lcert_code,&tDevice))) { *pRetCode = ret; } else if(tDevice.state_id == DEVISTAT_LOGOUT) { *pRetCode = E_DEVICE_NOT_EXIST; } else { memset(&tMsg,0,sizeof tMsg); tMsg.funid = 950040; if(tDevice.phytype != 1000) { //cardgroup[0] = '0'; strcpy(cardgroup,rPack->vsvarstr0); cardgroup[254] = '0'; for(i = 0;i < 255;i+=8) { out_data[i/8] = 0; for(j = 0;j < 8;++j) { char t = (*(cardgroup+i+j) == '1') ? 1 : 0; out_data[i/8] |= (t << (7-j)); } } memset(cardgroup,0,sizeof cardgroup); for(i = 0,j = 0;i < 256 / 8;++i) { j += sprintf(cardgroup+j,"%02X",out_data[i]); } cardgroup[256/4] = '\0'; } else { // 三九智慧设备 cardgroup[0] = '0'; strcat(cardgroup,rPack->vsvarstr0); cardgroup[255] = '0'; } tMsg.max_send_cnt = 1; //des2src(tMsg.devphy999_id,tDevice.devphy999_id); tMsg.devid = tDevice.device_id; AddXmlItemStr(tMsg.incontent,XML_KEY_CARDRIGHTTYPE,cardgroup); if((ret = AddMsgLst(&tMsg))) { *pRetCode = ret; } else { if(db_commit()) { *pRetCode = E_DB_COMMIT; return -1; } msgid = tMsg.mesid; retries = 3; sleep(2); while(retries-- > 0) { memset(&tMsg,0,sizeof tMsg); ret = DB_t_tif_meslist_read_by_mesid(msgid,&tMsg); if(!ret) { if(0 == tMsg.ecode) { des2src(out_pack->vsvarstr0,tMsg.emsg); ret = 0; break; } else if(9999 == tMsg.ecode) { des2src(out_pack->vsvarstr0,"前置机无应答"); } else { des2src(out_pack->vsvarstr0,tMsg.emsg); } } else { strcpy(out_pack->vsvarstr0,"读取指令失败"); } sleep(1); } *pRetCode = 0; PutRow(handle,out_pack,pRetCode,szMsg); } } if(*pRetCode == 0 ) { AnswerData(handle,*pRetCode,szMsg); return 0; } return -1; }
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 DoUnlossCard(int cardno) { int ret=0; T_t_card tCard; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.transcode=TC_CARDUNLOSS; memset(&tCard,0,sizeof(tCard)); ret=DB_t_card_read_lock_by_cur_and_cardno(cardno,&tCard); if (ret) { writelog(LOG_ERR,"cardno[%d]",cardno); if (DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDNO,cardno); else return E_DB_CARD_R; } des2src(trans.showcardno,tCard.showcardno); if(tCard.status[0]!=STATUS_NORMAL) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_LOGOUT,trans.cardno); } // if('1'!=tCard.lossflag[0]) // { // DB_t_card_free_lock_by_cur(); // return ERRINFO(E_CARDNO_NOLOST,trans.cardno); // } if('1'==tCard.frozeflag[0]) { DB_t_card_free_lock_by_cur(); ERRTIP("请先解冻后再解挂"); return ERRINFO(E_CARD_FREEZE,trans.cardno); } if('1'==tCard.badflag[0]) { DB_t_card_free_lock_by_cur(); return ERRINFO(E_CARD_BADRECORD,trans.cardno); } //判断是否存在过渡临时卡 if(CARDTYPE_TEMP!=tCard.cardtype) { ret=IsExistNormalTmpCardByCustid(tCard.custid); if(ret) { DB_t_card_free_lock_by_cur(); if(DB_EXIST==ret) { //锁定该卡,该卡只能销户 ERRTIP("该客户存在卡状态正常的过渡临时卡,请先退掉过卡状态正常的渡临时卡再解挂"); return E_EXIST_NORMALCARD; } else return ret; } } else { //检查是否存在其他正常的卡 ret=IsExistOtherNormalCardByCustid(tCard.custid,tCard.cardno); if(ret) { if(DB_EXIST==ret) { //锁定该卡,该卡只能销户 TIPINFO("该客户存在卡状态正常的其他卡,该卡解挂后将不能再使用,请解挂后注销该卡!"); tCard.lockflag[0]='1'; des2src(tCard.lockdate,trans.accdate); } else { DB_t_card_free_lock_by_cur(); return ret; } } } tCard.lossflag[0]='0'; tCard.lossdate[0]=0; ret=getCardVerNo(tCard.cardverno); if (ret) { DB_t_card_free_lock_by_cur(); return ret; } 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_by_custid(tCard.custid,&customer); if (ret) { if (DB_NOTFOUND==ret) return E_NOTEXIST_CUSTOMER; else return E_DB_CUSTOMER_R; } trans.custid=tCard.custid; des2src(trans.custname,customer.custname); des2src(trans.stuempno,customer.stuempno); } UpdCardVerStatus(cardno,CARDVERTYPE_CARDLOSS); if('1'==tCard.lockflag[0]) { //不下发名单 strcpy(trans.summary,"000101010101"); return 0; } //更新系统黑名单最大版本号 ret=SetSysParaVal(SYSPARA_MAXBLACKCARDVERNO,tCard.cardverno); if(ret) { return ret; } T_t_cardver cardver; memset(&cardver,0,sizeof(cardver)); cardver.cardno=tCard.cardno; des2src(cardver.accdate,pAccTrans->trans.accdate); cardver.termid=trans.termid; cardver.termseqno=trans.termseqno; cardver.cardno=tCard.cardno; des2src(cardver.cardphyid,tCard.cardphyid); des2src(cardver.stuempno,customer.stuempno); cardver.cardvertype=CARDVERTYPE_CARDUNLOSS; cardver.adddelflag=ADDDELFLAG_DEL; cardver.status[0]=STATUS_NORMAL; des2src(cardver.cardverno,tCard.cardverno); ret=DB_t_cardver_add(&cardver); if (ret) { if (DB_REPEAT==ret) return E_DB_CARDVER_E; else return E_DB_CARDVER_I; } des2src(trans.summary,cardver.cardverno); char broadcastblkflag[20]={0}; ret=GetSysParaVal(SYSPARA_BROADCASTBLKLIST,broadcastblkflag); if(ret) { if(DB_NOTFOUND==ret) return 0; else return E_DB_SYSKEY_R; } if(broadcastblkflag[0]!='1') return 0; T_t_msglist tMsgList; memset(&tMsgList,0,sizeof(tMsgList)); AddXmlItemInt(tMsgList.reqdata, XML_KEY_CARDID,tCard.cardno); AddXmlItemStr(tMsgList.reqdata, XML_KEY_VERNUM,tCard.cardverno); AddXmlItemInt(tMsgList.reqdata, XML_KEY_ADDDELSIGN,1); //增删标志 tMsgList.funcno = 930005; tMsgList.pfuncno = 846307; tMsgList.msglevel = MESLIST_PRIORITY_REALTIME; tMsgList.msgtype = MESLIST_TYPE_ORDER; ret=AddMsgLst(&tMsgList); if(ret) { writelog(LOG_ERR,"AddMsgLst err[%d]",ret); return ret; } return 0; }