Esempio n. 1
0
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);
}
Esempio n. 2
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;
}
Esempio n. 3
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
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;
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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);
}
Esempio n. 8
0
/* ****** 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);
}
Esempio n. 9
0
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;
}