int FTestIReply(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *iRetCode,char *szMsg) { unsigned char *pb; pb = g_SvrLink.head.ParmBits; g_SvrLink.SetCol(handle,pb); PutRow(handle,rPack,iRetCode,szMsg); AnswerData(handle,*iRetCode,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; int rate = 0; int retries = 0; int msgid; 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); 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))) { *pRetCode = ret; } else if(tDevice.state_id == DEVISTAT_LOGOUT) { *pRetCode = E_DEVICE_NOT_EXIST; } else if((ret = DB_t_cif_shop_pos_open_select_by_c0_and_device_id(rPack->lcert_code))) { *pRetCode = ret; } 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))) { *pRetCode = ret; if(ret == DB_NOTFOUND) *pRetCode = 0; break; } 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 ) { int newrate = (int)tShop.ratio * 100; if(newrate > rate) rate = newrate; } } } if(*pRetCode) return -1; memset(&tMsg,0,sizeof tMsg); tMsg.funid = 950041; //des2src(tMsg.devphy999_id,tDevice.devphy999_id); tMsg.devid = tDevice.device_id; AddXmlItemInt(tMsg.incontent,XML_KEY_FEE,rate); tMsg.max_send_cnt = 5; if((ret = AddMsgLst(&tMsg))) { *pRetCode = ret; } else { if(db_commit()) { *pRetCode = E_DB_COMMIT; return -1; } retries = 3; msgid = tMsg.mesid; while(retries-- > 0) { memset(&tMsg,0,sizeof tMsg); ret = DB_t_tif_meslist_read_by_mesid(msgid,&tMsg); des2src(out_pack->vsvarstr0,tMsg.emsg); if(!ret && !tMsg.ecode) { break; } // 等待1秒 sleep(1); } PutRow(handle,out_pack,pRetCode,szMsg); AnswerData(handle,*pRetCode,szMsg); return 0; } return -1; }
int F950041(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; T_t_pif_device tDevice; T_t_cif_shop_pos tShopPos; T_t_cif_shop tShop; T_t_tif_meslist tMsg; T_t_pif_feetype tFeeType; int rate = 0; int retries = 0; int msgid; unsigned char buf[32] = ""; char cardlist[100] = ""; int rows = 0; int i,j; memset(&tDevice,0,sizeof tDevice); memset(&tFeeType,0,sizeof tFeeType); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_VSVARSTR0,F_VSMESS,0); if(rPack->lcert_code < 1) { *pRetCode = E_DEVICE_NOT_EXIST; } else if((ret = DB_t_pif_device_read_by_device_id(rPack->lcert_code,&tDevice))) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_DEVICE_N; else *pRetCode = E_DB_DEVICE_R; } else if(tDevice.state_id == DEVISTAT_LOGOUT) { *pRetCode = E_DEVICE_NOT_EXIST; } // 如果是 39 的充值机 else if(strcmp(tDevice.devtype,"0201") == 0 && tDevice.phytype == 1000) { des2src(rPack->sdate0,tDevice.devphy999_id); ret = F930006(handle,iRequest,rPack,pRetCode,szMsg); if(ret) { goto LRet; } return 0; } else if((ret = DB_t_cif_shop_pos_open_select_by_c0_and_device_id(rPack->lcert_code))) { *pRetCode = E_DB_SHOP_POS_R; } else { while(1) { memset(&tShopPos,0,sizeof tShopPos); memset(&tShop,0,sizeof tShop); if((ret = DB_t_cif_shop_pos_fetch_select_by_c0(&tShopPos))) { if(ret == DB_NOTFOUND) { writelog(LOG_DEBUG,"shop doesn't find [%d]!"); *pRetCode = 0; } else *pRetCode = E_DB_SHOP_POS_R; break; } writelog(LOG_DEBUG,"find shop [%d]",tShopPos.shop_id); if((ret = DB_t_cif_shop_read_by_shop_id(tShopPos.shop_id,&tShop))) { *pRetCode = ret; break; } if('1' == tShop.is_leaf[0] && '1' == tShop.is_getfee[0] && amtcmp(tShop.ratio,0.00)>0 ) { writelog(LOG_DEBUG,"shop rate [%.02f]",tShop.ratio); int newrate = D2I(tShop.ratio * 100); if(newrate > rate) rate = newrate; } } } if(*pRetCode) return -1; ret = DB_t_pif_feetype_open_select_by_cur1(); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_DB_FEETYPE_N; else *pRetCode = E_DB_FEETYPE_R; return -1; } memset(buf,0,sizeof buf); while(1) { memset(&tFeeType,0,sizeof &tFeeType); ret = DB_t_pif_feetype_fetch_select_by_cur1(&tFeeType); if(ret) { if(DB_NOTFOUND == ret) { if(rows > 0) break; *pRetCode = E_DB_FEETYPE_N; } else *pRetCode = E_DB_FEETYPE_R; } rows++; if(tFeeType.fee_type < 0 || tFeeType.fee_type > 255 || tFeeType.is_outfee[0] != '1' ) continue; writelog(LOG_DEBUG,"fee[%s][%d][%c]",tFeeType.fee_name,tFeeType.fee_type ,tFeeType.is_outfee[0]); _SET_BIT(buf,tFeeType.fee_type-1); } //writelog(LOG_DEBUG,"bit length %d",BIT_LENGTH); memset(&tMsg,0,sizeof tMsg); tMsg.funid = 950041; tMsg.level = 1; tMsg.devid = tDevice.device_id; for(i = 0,j = 0;i < sizeof buf;++i) { j += sprintf(cardlist+j,"%02x",buf[i]); } AddXmlItemInt(tMsg.incontent,XML_KEY_FEE,rate); AddXmlItemStr(tMsg.incontent,XML_KEY_CARDRIGHTTYPE,cardlist); tMsg.max_send_cnt = 5; if((ret = AddMsgLst(&tMsg))) { *pRetCode = ret; } else { if(db_commit()) { *pRetCode = E_DB_COMMIT; return -1; } retries = 10; msgid = tMsg.mesid; for(retries=0;(retries<10)&&(tMsg.ecode!=0);retries++) { memset(&tMsg,0,sizeof tMsg); ret = DB_t_tif_meslist_read_by_mesid(msgid,&tMsg); if(ret) { strcpy(out_pack->vsvarstr0,"读取指令失败"); *pRetCode=E_DB_MESLIST_R; strcpy(szMsg,"读取指令失败"); return -1; } // 等待1秒 sleep(1); } switch(tMsg.ecode) { case 0: //成功 des2src(out_pack->vsmess,"成功"); strcpy(szMsg,"成功"); break; case 9999: //交易未处理 des2src(out_pack->vsmess,"前置机无应答"); strcpy(szMsg,"前置机无应答"); goto LRet; default: //交易已经处理,但结果是失败 des2src(out_pack->vsmess,tMsg.emsg); goto LRet; } PutRow(handle,out_pack,pRetCode,szMsg); AnswerData(handle,*pRetCode,szMsg); return 0; } LRet: return -1; }
static int Read847232(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { /* EXEC SQL BEGIN DECLARE SECTION; sqlint32 ho_sysid; char ho_sysname[61] = ""; char ho_ sqlint16 ho_indr = 1; char sqlcmd[1024] = ""; EXEC SQL END DECLARE SECTION; char sqltmp[128]; */ int rows; int ret; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); T_t_subsyspara subsyspara; T_t_subsystem subsystem; ret = DB_t_subsyspara_open_select_by_c1(); if(ret) { if(DB_NOTFOUND == ret) return E_DB_SUBSYSPARAMS_N; return E_DB_SUBSYSPARAMS_R; } ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LCERT_CODE,F_LVOL0,F_LVOL1,F_LVOL2,F_LVOL3,F_LVOL4,F_LVOL5,F_LVOL6 ,F_LVOL7,F_LVOL8,F_LVOL9,F_SDATE0,F_SEMAIL,F_SSTATUS1,F_SNAME2,F_LVOL10,F_LVOL12,F_SCUST_AUTH,F_LSAFE_LEVEL,F_LSAFE_LEVEL2,0); rows = 0; while(1) { memset(&subsyspara,0,sizeof subsyspara); ret = DB_t_subsyspara_fetch_select_by_c1(&subsyspara); if(ret) { DB_t_subsyspara_close_select_by_c1(); if(ret == DB_NOTFOUND) { if(rows > 0) return 0; return E_DB_SUBSYSPARAMS_N; } return E_DB_SUBSYSPARAMS_R; } memset(&subsystem,0,sizeof subsystem); ret = DB_t_subsystem_read_by_sysid(subsyspara.sysid,&subsystem); if(ret) { if(DB_NOTFOUND == ret) continue; DB_t_subsyspara_close_select_by_c1(); return E_DB_SUBSYSTEM_R; } if(subsystem.status[0]!=STATUS_NORMAL) continue; rows++; des2src(out_pack->semail,subsystem.sysname); out_pack->lcert_code = subsystem.sysid; out_pack->lvol0 = subsyspara.beatinterval; // 10s out_pack->lvol1 = subsyspara.beatcntlimit; out_pack->lvol2 = subsyspara.reqbeatfuncno; // 保留 out_pack->lvol3 = subsyspara.reqtaskfuncno; out_pack->lvol4 = subsyspara.exectimeout; // 1s // des2src(out_pack->sdate0,subsyspara.devtype); // 测试设备 // out_pack->sstatus1[0] = subsyspara.workmode[0]; // 设备联机模式 out_pack->lvol5 = subsyspara.colinterval; // 流水采集频率 5s out_pack->lvol6 = subsyspara.reqdevfuncno; out_pack->lvol7 = subsyspara.taskmaxlimit; out_pack->lvol8 = subsyspara.qryinterval; out_pack->lvol9 = subsyspara.respfuncno; out_pack->lvol10 = subsyspara.bccdrtpno; des2src(out_pack->scust_auth,subsyspara.bccdrtpip); out_pack->lvol12=subsyspara.bccdrtpport; out_pack->lsafe_level=subsyspara.bccmainfuncno; out_pack->lsafe_level2=subsyspara.bccinterval; PutRow(handle,out_pack,pRetCode,szMsg); if(rows%10 == 0) AnswerDataPart(handle,*pRetCode,szMsg); } AnswerData(handle,*pRetCode,szMsg); return 0; }
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 F930037(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int row=0; int dev_id=0; char devphy999_id[9]=""; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); T_t_pif_device p; T_t_pif_device parent; #ifdef DEBUG writelog(LOG_DEBUG,"subsystem_id[%d]",rPack->lcert_code); writelog(LOG_DEBUG,"dyn_key[%s]",rPack->scust_limit2); #endif ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SDATE2,F_SDATE1,F_LVOL4,F_SEMP,F_SDATE3,F_SHOLDER_TYPE,F_SNOTE2,F_LVOL1,F_LVOL5,F_STIME0,F_LVOL6,F_LVOL7,F_LVOL8,F_SSTATION0,F_SBANK_CODE,F_LVOL9,F_LVOL10,F_SSERIAL0,F_SSERIAL1,F_LVOL11,F_SCUST_AUTH,F_LVOL12,F_SCUST_AUTH2,F_LVOL0,0); writelog(LOG_DEBUG,"前置机%d下载设备档案",rPack->lcert_code); ret=chk_dyn_key(rPack->lcert_code,rPack->scust_limit2); if(ret) { *pRetCode = ret; goto L_RETU; } strncpy(devphy999_id,rPack->sdate1,sizeof(devphy999_id)-1); trim(devphy999_id); if(strlen(devphy999_id)&&strncmp(devphy999_id,"00000000",8)!=0) { memset(&p,0,sizeof(p)); ret = GetDevIdByDevPhyId(&dev_id,devphy999_id); if(ret) { *pRetCode=ret; goto L_RETU; } ret=DB_t_pif_device_read_by_devphy999_id(devphy999_id, &p); if(ret) { writelog(LOG_ERR,"devphy999_id[%s]",devphy999_id); if(DB_NOTFOUND==ret) *pRetCode=E_DB_DEVICE_N; else *pRetCode=E_DB_DEVICE_R; goto L_RETU; } if(p.state_id==DEVISTAT_LOGOUT) { *pRetCode=E_DB_DEVICE_N; goto L_RETU; } p.state_id=DEVISTAT_REGIST; if((strncmp(p.dev999_id,"FFFFFFFF",8)==0)||(strlen(p.dev999_id)==0)) { *pRetCode=E_DB_DEVICE_N; goto L_RETU; } if(ROOT_DEVICE_ID == p.fdev_id) memset(out_pack->stime0,0,sizeof(out_pack->stime0)); else { out_pack->lvol0 = p.device_id; memset(&parent,0,sizeof parent); ret = DB_t_pif_device_read_by_device_id(p.fdev_id,&parent); if(ret) { des2src(out_pack->stime0,"FFFFFFFF"); } else { des2src(out_pack->stime0,parent.devphy999_id); } } strncpy(out_pack->sdate2,p.dev999_id,sizeof(out_pack->sdate2)-1); strncpy(out_pack->sdate1,p.devphy999_id,sizeof(out_pack->sdate1)-1); out_pack->lvol4=p.dev999_no; strncpy(out_pack->semp,p.devtype,sizeof(out_pack->semp)-1); strncpy(out_pack->sdate3,p.devversion,sizeof(out_pack->sdate3)-1); strncpy(out_pack->sholder_type,p.cardstr,sizeof(out_pack->sholder_type)-1); strncpy(out_pack->snote2,p.cardtype,sizeof(out_pack->snote2)-1); out_pack->lvol5=p.portcount; out_pack->lvol6=p.portno; out_pack->lvol7=p.state_id; out_pack->lvol8=p.joinmode; strncpy(out_pack->sstation0,p.comadd,sizeof(out_pack->sstation0)-1); strncpy(out_pack->sbank_code,p.port,sizeof(out_pack->sbank_code)-1); out_pack->lvol9=p.baudrate; out_pack->lvol10=p.comtype; strncpy(out_pack->sserial0,p.bsheetvdate,sizeof(out_pack->sserial0)-1); strncpy(out_pack->sserial1,p.bsheetver,sizeof(out_pack->sserial1)-1); out_pack->lvol11=p.lasttraserno; strncpy(out_pack->scust_auth,p.lasttradate,sizeof(out_pack->scust_auth)-1); out_pack->lvol12=p.lastshutserno; strncpy(out_pack->scust_auth2,p.lastshutdate,sizeof(out_pack->scust_auth2)-1); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } ret=DB_t_pif_device_open_select_by_c1_and_subsystem_id(rPack->lcert_code); writelog(LOG_DEBUG,"subsystem [%d]",rPack->lcert_code); if(ret) { writelog(LOG_ERR,"sub_system_id[%d]",rPack->lcert_code); *pRetCode=E_DB_DEVICE_R; goto L_RETU; } while(1) { memset(&p,0,sizeof(p)); ret=DB_t_pif_device_fetch_select_by_c1(&p); if(ret) { if(DB_NOTFOUND==ret) { if(row) break; else *pRetCode=E_DB_DEVICE_N; } else *pRetCode=E_DB_DEVICE_R; goto L_RETU; } if(p.state_id==DEVISTAT_LOGOUT || PHYTYPE_999_DEV != p.phytype) continue; p.state_id=DEVISTAT_REGIST; if((strncmp(p.dev999_id,"FFFFFFFF",8)==0)||(strlen(p.dev999_id)==0)) continue; if(ROOT_DEVICE_ID == p.fdev_id) { memset(out_pack->stime0,0,sizeof(out_pack->stime0)); out_pack->lvol1 = -1; } else { out_pack->lvol1 = p.fdev_id; memset(&parent,0,sizeof parent); ret = DB_t_pif_device_read_by_device_id(p.fdev_id,&parent); if(ret) { des2src(out_pack->stime0,"FFFFFFFF"); } else { des2src(out_pack->stime0,parent.dev999_id); } } out_pack->lvol0 = p.device_id; out_pack->lvol7=p.state_id; strncpy(out_pack->sdate2,p.dev999_id,sizeof(out_pack->sdate2)-1); strncpy(out_pack->sdate1,p.devphy999_id,sizeof(out_pack->sdate1)-1); out_pack->lvol4=p.dev999_no; strncpy(out_pack->semp,p.devtype,sizeof(out_pack->semp)-1); strncpy(out_pack->sdate3,p.devversion,sizeof(out_pack->sdate3)-1); strncpy(out_pack->sholder_type,p.cardstr,sizeof(out_pack->sholder_type)-1); strncpy(out_pack->snote2,p.cardtype,sizeof(out_pack->snote2)-1); out_pack->lvol5=p.portcount; out_pack->lvol6=p.portno; out_pack->lvol8=p.joinmode; strncpy(out_pack->sstation0,p.comadd,sizeof(out_pack->sstation0)-1); strncpy(out_pack->sbank_code,p.port,sizeof(out_pack->sbank_code)-1); out_pack->lvol9=p.baudrate; out_pack->lvol10=p.comtype; strncpy(out_pack->sserial0,p.bsheetvdate,sizeof(out_pack->sserial0)-1); strncpy(out_pack->sserial1,p.bsheetver,sizeof(out_pack->sserial1)-1); out_pack->lvol11=p.lasttraserno; strncpy(out_pack->scust_auth,p.lasttradate,sizeof(out_pack->scust_auth)-1); out_pack->lvol12=p.lastshutserno; strncpy(out_pack->scust_auth2,p.lastshutdate,sizeof(out_pack->scust_auth2)-1); row++; PutRow(handle,out_pack,pRetCode,szMsg); if(row%10==0) AnswerDataPart(handle,*pRetCode,szMsg); } AnswerData(handle,*pRetCode,szMsg); return 0; L_RETU: return -1; }
int CallBDFunc(int fno,TRUSERID *handle,ST_CPACK *rpack,ST_PACK *pArrays,int *iRetCode, char *szMsg) { int r=0; int rtn=0; int sendtype=0; char param[101]=""; #ifdef _DEBUG1 CMemoryState cm1, cm2, cm3; #endif APPFUNC pFunc = g_XBDefines[fno].pFunc; #ifdef _DEBUG1 cm1.Checkpoint(); #endif *iRetCode=0; *szMsg=0; g_pArrays=pArrays; //判断是否是结帐时刻,如果是则等待处理 sendtype=rpack->head.RequestType; switch(sendtype) { case 95: case 93: #ifdef _DEBUG_CPACK // rtn=SaveCPackData(rpack); // if(rtn) // { // //writelog(LOG_ERR,"SaveCpackData err "); // strcpy(szMsg,"写流水日志表错误"); // ERR_DEAL( szMsg,rtn); // break; // } #endif rtn = (*pFunc)(handle,rpack->head.RequestType,&rpack->pack,iRetCode,szMsg); #ifdef _DEBUG1 cm2.Checkpoint(); if (cm3.Difference(cm1, cm2)) { BCCMsgLogOut(14444,"在执行功能号:%u时候,经检查,内存出现错误!",rpack->head.RequestType); g_LogFile.WriteLogEx(14444,"在执行功能号:%u时候,经检查,内存出现错误!",rpack->head.RequestType); cm3.DumpStatistics(); } #endif break; default: rtn=GetParameter(GLOBE_FLAG_BALANCE,param); if(rtn) { *iRetCode=rtn; break; } else if(strncmp(param,"0",1)!=0) { rtn=E_DAYEND_STATUS; *iRetCode=rtn; break; } // rtn=SaveCPackData(rpack); // if(rtn) // { // //writelog(LOG_ERR,"SaveCpackData err "); // strcpy(szMsg,"写流水日志表错误"); // ERR_DEAL( szMsg,rtn); // break; // } rtn = (*pFunc)(handle,rpack->head.RequestType,&rpack->pack,iRetCode,szMsg); #ifdef _DEBUG1 cm2.Checkpoint(); if (cm3.Difference(cm1, cm2)) { BCCMsgLogOut(14444,"在执行功能号:%u时候,经检查,内存出现错误!",rpack->head.RequestType); g_LogFile.WriteLogEx(14444,"在执行功能号:%u时候,经检查,内存出现错误!",rpack->head.RequestType); cm3.DumpStatistics(); } #endif break; } if(rtn) { char sErrMsg[101]=""; char sRetMsg[256]=""; if(*szMsg) snprintf(sRetMsg,256," %s",szMsg); if(*iRetCode==0) *iRetCode=rtn; r=get_errcode_msg(*iRetCode, sErrMsg); db_rollback(); snprintf(szMsg,256,"%s%s\n%s",sErrMsg,sRetMsg,g_sqlmsg); writelog(LOG_ERR,"Func[%d]ecode[%d]msg[%s]",rpack->head.RequestType,*iRetCode,szMsg); ERR_DEAL(szMsg,*iRetCode); if(r) { AnswerData(handle,*iRetCode,szMsg); db_disconnect(); writelog(LOG_ERR,"数据库错误,系统退出"); exit(1); } } else { writelog(LOG_ERR,"Func[%d]Msg[%s]",rpack->head.RequestType,szMsg); if(strncmp(rpack->pack.scust_limit,"test",4)==0) db_rollback(); else { //记录操作员流水 r=db_commit(); if(r) { *iRetCode=E_DB_COMMIT; strcpy(szMsg,"数据库事务提交失败"); writelog(LOG_ERR,"Func[%d]Msg[%s]",rpack->head.RequestType,szMsg); db_rollback(); ERR_DEAL( szMsg,*iRetCode); } } } return(rtn); }
/* ****** Updated by CHENYH at 2004-4-9 10:06:44 ****** 增加pArrays: 为了能够接收处理多请求记录的情况 */ int CallBDFunc(int fno,TRUSERID *handle,ST_CPACK *rpack,ST_PACK *pArrays,int *iRetCode, char *szMsg) { int r=0; int rtn=0; int sendtype=0; char param[101]=""; #ifdef _DEBUG1 CMemoryState cm1, cm2, cm3; #endif APPFUNC pFunc = g_BDefines[fno].pFunc; #ifdef _DEBUG1 cm1.Checkpoint(); #endif *iRetCode=0; *szMsg=0; //判断是否是结帐时刻,如果是则等待处理 sendtype=rpack->head.RequestType/10000; switch(sendtype) { case 93: rtn = (*pFunc)(handle,rpack->head.RequestType,&rpack->pack,iRetCode,szMsg); break; default: rtn=GetParameter(GLOBE_FLAG_BALANCE,param); if(rtn) { *iRetCode=rtn; break; } else if(strncmp(param,"0",1)!=0) { rtn=E_DAYEND_STATUS; *iRetCode=rtn; break; } rtn = (*pFunc)(handle,rpack->head.RequestType,&rpack->pack,iRetCode,szMsg); break; } if(rtn) { char sErrMsg[60]=""; char sRetMsg[256]=""; if(*szMsg) snprintf(sRetMsg,256," %s",szMsg); r=get_errcode_msg(*iRetCode, sErrMsg); db_rollback(); snprintf(szMsg,256,"%s%s",sErrMsg,sRetMsg); writelog(LOG_ERR,"Func[%d]ecode[%d]msg[%s]",rpack->head.RequestType,*iRetCode,szMsg); ERR_DEAL(szMsg,*iRetCode); if(r) { AnswerData(handle,*iRetCode,szMsg); db_disconnect(); writelog(LOG_ERR,"数据库错误,系统退出"); exit(1); } } else { r=db_commit(); if(r) { *iRetCode=E_DB_COMMIT; strcpy(szMsg,"数据库事务提交失败"); writelog(LOG_ERR,"Func[%d]Msg[%s]",rpack->head.RequestType,szMsg); db_rollback(); ERR_DEAL( szMsg,*iRetCode); } } #ifdef _DEBUG1 cm2.Checkpoint(); if (cm3.Difference(cm1, cm2)) { BCCMsgLogOut(14444,"在执行功能号:%u时候,经检查,内存出现错误!",rpack->head.RequestType); g_LogFile.WriteLogEx(14444,"在执行功能号:%u时候,经检查,内存出现错误!",rpack->head.RequestType); cm3.DumpStatistics(); } #endif if (g_BUnit.m_SqlDB.lErrorCode<=-10000) // 出现SQL比较严重的错误 { if (SQLIsConnectOK()==0) { SQLDisconnect(); } g_BUnit.m_SqlDB.lErrorCode = 0; } return(rtn); }
int F250003(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; char ftpserver_ip[31]=""; //移动服务器的ip char ftpserver_filepath[256]=""; //移动服务端对账文件路径 char chkacc_date[11]=""; //对帐日期 char autoftpcmd[1024]=""; char localfile[256]=""; char remotefile[256]=""; char sFileName[256], sCommand[256], sBuffer[1024]; FILE *fp; char tx_date[9]=""; char phone[31]=""; char sSerialNo[20]=""; char sCardId[20]=""; int serial_no=0; int card_id=0; int amount=0; char sAmount[20]=""; char *phead; char *ptail; int rows=0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SDATE0,F_SPHONE,F_LSERIAL0,F_LVOL0,F_LVOL1,0); des2src(ftpserver_ip,rPack->saddr); des2src(ftpserver_filepath,rPack->vsvarstr0); des2src(chkacc_date,rPack->sorder0); //ftp取对账文件 sprintf(remotefile,"%s/YKT_GZ.%s" ,ftpserver_filepath,chkacc_date); sprintf(localfile,"/tmp/YKT_GZ.%s",chkacc_date); /* 得到文件 */ sprintf(sCommand,"autoftp.sh %s %s %s",ftpserver_ip,remotefile,localfile); if(system(sCommand) != 0) { writelog(LOG_ERR,"ftp error[%s]", sCommand); *pRetCode = E_TRANS_UNKNOW_ERROR; goto l_ret; } if((fp = fopen(localfile, "r")) == NULL) { writelog(LOG_ERR, "open filename[%s] error", localfile); *pRetCode = E_TRANS_UNKNOW_ERROR; goto l_ret; } while(1) { if(fgets(sBuffer, sizeof(sBuffer), fp) == NULL) break; serial_no=0; card_id=0; amount=0; memset(tx_date,0,sizeof(tx_date)); memset(phone,0,sizeof(phone)); memset(sSerialNo,0,sizeof(sSerialNo)); memset(sAmount,0,sizeof(sAmount)); memset(sCardId,0,sizeof(sCardId)); if(strncmp(sBuffer,"TAIL",4)==0) break; phead=sBuffer; memcpy(tx_date,phead,8); phead+=8; ptail=strchr(phead,'&'); if(NULL==ptail) { fclose(fp); goto l_ret; } memcpy(sSerialNo,phead,ptail-phead); serial_no=atol(sSerialNo); phead=ptail+1; ptail=strchr(phead,'&'); if(NULL==ptail) { fclose(fp); goto l_ret; } memcpy(phone,phead,ptail-phead); phead=ptail+1; ptail=strchr(phead,'&'); if(NULL==ptail) { fclose(fp); goto l_ret; } memcpy(sAmount,phead,ptail-phead); amount=atol(sAmount); phead=ptail+1; strcpy(sCardId,phead); trim(sCardId); card_id=atol(sCardId); des2src(out_pack->sdate0,tx_date); des2src(out_pack->sphone,phone); out_pack->lserial0=serial_no; out_pack->lvol0=card_id; out_pack->lvol1=amount; writelog(LOG_DEBUG,"对账日期 [%s][%s]",tx_date,out_pack->sphone); PutRow(handle,out_pack,pRetCode,szMsg); rows++; if(rows%10==0) AnswerDataPart(handle,*pRetCode,szMsg); } AnswerData(handle,*pRetCode,szMsg); fclose(fp); return 0; l_ret: return -1; }