Exemplo n.º 1
0
static void getdata(Message *Msg,ST_PACK *rPack)
{
// 	char trade_date[9]={0}; // 交易日期 
// 	char trade_time[7]={0}; // 交易时间
	//set_msg(Msg->campus_no,"%s","001");	//1学校编号
	//des2src(Msg->txcode,"20200"); //2交易代码
// 	des2src(Msg->userno, rPack->sphone);	//3 学工号
// 	des2src(Msg->usernoalias, rPack->scust_auth2);// 4身份证号
// 	des2src(Msg->acctperi, rPack->vsmess); //5 对账日期
// 	des2src(Msg->acctno, rPack->scust_limit2);//6 银行卡号
// 	set_msg(Msg->due_amount,"%0.2f",rPack->damt0); //7交易金额(格式:180.00)x
// 	//8
// 	des2src(Msg->custname, rPack->scust_limit );//9 客户名
// 	set_msg(Msg->site,"%d",rPack->lvol6);  //10
// 	set_msg(Msg->teller,"%d",rPack->lvol6); //11
// 	des2src(trade_date, rPack->sdate0); //12 交易日期
// 	des2src(trade_time, rPack->stime0); //12 交易时间
// 	set_msg(Msg->time,"%s%s",trade_date,trade_time); //12	交易时间,日期+时间
// 	des2src(Msg->comporder, rPack->sholder_ac_no); //13

	snprintf(Msg->userno, sizeof(Msg->userno), "%d", rPack->lvol2); //3 客户号
	snprintf(Msg->usernoalias, sizeof(Msg->usernoalias), "%s", rPack->scust_auth2); // 身份证号
	snprintf(Msg->acctno, sizeof(Msg->acctno), "%s", rPack->scust_limit2); // 银行卡号
	snprintf(Msg->custname, sizeof(Msg->custname), "%s", rPack->scust_limit); // 客户名
	snprintf(Msg->acctperi, sizeof(Msg->acctperi), "%s", rPack->sdate0); // 交易日期
	if(strlen(Msg->acctperi) == 0)// 没有提供日期
		getsysdate(Msg->acctperi);
	snprintf(Msg->due_amount, sizeof(Msg->due_amount), "%.2f", rPack->damt0);// 交易金额
	snprintf(Msg->site, sizeof(Msg->site), "%d", rPack->lvol6);// 终端ID
	getsysdatetime(Msg->time); // 交易日期+时间
	if(strlen(rPack->sholder_ac_no) > 8) // 一卡通交易参考号
	{
		// 一卡通交易参考号 去除 yyMMDD, 作为系统跟踪号
		int serial = atoi(&rPack->sholder_ac_no[8]);
		snprintf(Msg->comporder, sizeof(Msg->comporder), "%06d", serial); // 公司方流水
		snprintf(Msg->comp_o_order, sizeof(Msg->comp_o_order), "%06d", serial); // 公司方流水
	}
	snprintf(Msg->bankorder, sizeof(Msg->bankorder), rPack->sname); // 银行方流水
	snprintf(Msg->bank_o_order, sizeof(Msg->bank_o_order), rPack->sname); // 银行方原交易流水
	//print_send_msg(Msg); // 打印发送报文

}
Exemplo n.º 2
0
int F930067(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
	int cnt=0;
	int mesid=0;
	char sysdatetime[21]="";
       T_t_tif_meslist tMesList;
	T_t_pif_device tDevice;

	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	ResetNormalCPack(&aPack,0,1);

	memset(&tMesList,0,sizeof(tMesList));
	memset(&tDevice,0,sizeof tDevice);
	
	if(strlen(in_pack->sdate0)==0)
	{
		if(in_pack->lcert_code <= 0)
		{
			*pRetCode=E_DEVPHYID_NULL;
			goto L_RETU;
		}
		tMesList.devid = in_pack->lcert_code;
	}
	else
	{
		if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice)))
		{
			*pRetCode = ret;
			goto L_RETU;
		}
		tMesList.devid = tDevice.device_id;
	}
	
	getsysdatetime(sysdatetime);
	AddXmlItemInt(tMesList.incontent,XML_KEY_FTFLAG,in_pack->lvol3);	

	tMesList.funid = 930067;
	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;
	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;
	}	
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,0);
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
L_RETU:
	return  -1;	
}
Exemplo n.º 3
0
int do_reverse_balance(T_t_tif_tradelog *tTradelog,RevAcc *revacc)
{
	int ret = -1;
	int idxSub=0;
	char sTxDateandtime[21]="";
	T_t_aif_account tAccountDb;
	T_t_aif_account tAccountCr;
	T_t_tif_tradelog tTradelogDb;
	T_t_tif_tradelog tTradelogCr;
	T_t_tif_subject  tSubject;
	T_t_tif_cfgsplit  tCfgsplit;
	
	memset(&tAccountDb,0,sizeof tAccountDb);
	memset(&tAccountCr,0,sizeof tAccountCr);
	memset(&tSubject,0,sizeof tSubject);
	memset(&tCfgsplit,0,sizeof tCfgsplit);
	memset(&tTradelogDb,0,sizeof tTradelogDb);
	memset(&tTradelogCr,0,sizeof tTradelogCr);
	

	// 处理借方
	memcpy(&tTradelogDb,tTradelog,sizeof tTradelogDb);
	tTradelogDb.seri_type = TXCODE_TX_REVEAL;					// 交易代码记录为冲正
	
	ret = DB_t_aif_account_read_lock_by_cur_and_account_id(tTradelog->act_id, &tAccountDb);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_ACTNO_NOT_EXIST;
		else
			return E_DB_ACCOUNT_R;
	}
	if(tAccountDb.current_state == ACCOUNTSTAT_LOGOUT)
	{
		DB_t_aif_account_free_lock_cur();
		writelog(LOG_ERR, "read account err[%d]act_id[%s]", E_ACTNO_LOGOUT, tAccountDb.account_id);
		return E_ACTNO_LOGOUT;
	}
	
	ret = DB_t_tif_subject_read_by_subno(tAccountDb.subno, &tSubject);
	if(ret)
	{
		DB_t_aif_account_free_lock_cur();
		return ret;
	}
		
	if (SUBTYPE_FUND== tSubject.subtype|| SUBTYPE_COST==  tSubject.subtype )
	{
		tAccountDb.cur_bala = D4U5(tAccountDb.cur_bala- tTradelog->op_fee,6);
		tAccountDb.cur_freebala = D4U5(tAccountDb.cur_freebala- tTradelog->op_fee,6);
		//db_amt_flag=1;
	}
	else
	{
		//db_amt_flag=-1;
		if(strncmp(tAccountDb.subno,"201",3)==0)
		{
			//消费时从冻结金额中扣除搭伙费
			ret = DB_t_tif_cfgsplit_read_by_txtype(tTradelog->fee_type, &tCfgsplit);
			if(ret)
			{
				DB_t_aif_account_free_lock_cur();
				return ret;
			}
			switch(tCfgsplit.fundtype)
			{
				case FUNDTYPE_BOARD://搭伙费
					tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala+ tTradelog->op_fee,6);			//总余额
					tAccountDb.cur_frozebala = D4U5(tAccountDb.cur_frozebala + tTradelog->op_fee,6);
					break;
				default:
					tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala+ tTradelog->op_fee,6);			//总余额
					tAccountDb.cur_freebala =D4U5(tAccountDb.cur_freebala+tTradelog->op_fee,6);	//可用余额
					//更新卡余额
					if(USE_CARD_TYPE_ONLINE==revacc->iUseCardFlag)
					{
						//联机交易保留交易金额的交易时间
						getsysdatetime(tAccountDb.reserve_1);
					
						 if(amtcmp(revacc->dOutCardBala,0)>=0)
						{
							//把搭伙费,交易金额都加上
							revacc->dOutCardBala=D4U5(revacc->dOutCardBala + tTradelog->op_fee,2);
							
							tAccountDb.card_balance=revacc->dOutCardBala;					//账户卡余额
							if(revacc->iTradeCnt>0)
								tAccountDb.consume_count=revacc->iTradeCnt;
						}
					}
					else if(USE_CARD_TYPE_NULL==revacc->iUseCardFlag)
					{
					    strcpy(sTxDateandtime,revacc->sTxDate);
						strcat(sTxDateandtime,revacc->sTxTime);
						revacc->dOutCardBala=D4U5(revacc->dOutCardBala + tTradelog->op_fee,2);
					//	if((tAccountDb.consume_count<=revacc->iTradeCnt)||(strncmp(sTxDateandtime,tAccountDb.reserve_1,14)>0))
					  if (tAccountDb.consume_count<=revacc->iTradeCnt)
						{
						//	strcpy(tAccountDb.reserve_1,revacc->sTxDate);						
							tAccountDb.card_balance=D4U5(revacc->dOutCardBala ,2);			//账户卡余额	
							
						}			
					}
					break;
			}
		}
		else
		{
			tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala + tTradelog->op_fee,6);
			tAccountDb.cur_freebala =D4U5(tAccountDb.cur_freebala+ tTradelog->op_fee,6);
		}

	}
	
	tTradelogDb.new_fee    = tAccountDb.cur_bala;						//借方帐户总余额
	tTradelogDb.cur_frozebala=tAccountDb.cur_frozebala;					//冻结金额
	ret = DB_t_aif_account_update_lock_by_cur(&tAccountDb);
	if (ret)
	{
		writelog(LOG_ERR, "update account err[%d] account[%s]", ret,tAccountDb.account_id);
		if (DB_NOTFOUND == ret)
			return E_ACTNO_NOT_EXIST;
		else
			return E_DB_ACCOUNT_U;
	}
	DB_t_aif_account_free_lock_cur();


	// 处理贷方
	ret = DB_t_aif_account_read_lock_by_cur_and_account_id(tTradelog->other_actid, &tAccountCr);
	if (ret)
	{
		writelog(LOG_ERR, "read account err[%d]act_id[%s]", ret, tTradelog->other_actid);
		if (DB_NOTFOUND == ret)
			return E_ACTNO_NOT_EXIST;
		else
			return E_DB_ACCOUNT_R;
	}
	if(tAccountCr.current_state == ACCOUNTSTAT_LOGOUT)
	{
		DB_t_aif_account_free_lock_cur();
		writelog(LOG_ERR, "read account err[%d]act_id[%s]", E_ACTNO_LOGOUT, tAccountCr.account_id);
		return E_ACTNO_LOGOUT;
	}
	memset(&tSubject,0,sizeof tSubject);
	ret = DB_t_tif_subject_read_by_subno(tAccountCr.subno, &tSubject);
	if(ret)
	{
		DB_t_aif_account_free_lock_cur();
		return ret;
	}

	if (SUBTYPE_FUND== tSubject.subtype|| SUBTYPE_COST== tSubject.subtype)
	{
		tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala+ tTradelog->op_fee,6);							//当前总余额
		tAccountCr.cur_freebala =D4U5(tAccountCr.cur_freebala+tTradelog->op_fee,6);							//当前可用余额
		//cr_amt_flag=-1;
	}
	else
	{
		//cr_amt_flag=1;
		//如果帐户类型为个人,则计算搭伙费,主要是充值使用
		if(strncmp(tAccountCr.subno,"201",3)==0)
		{
			tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala- tTradelog->op_fee,6);				//总余额
			if(tCfgsplit.txtype ==0)			//第一次读取
			{
				ret = DB_t_tif_cfgsplit_read_by_txtype(tTradelog->fee_type, &tCfgsplit);
				if(ret)
				{
					DB_t_aif_account_free_lock_cur();
					return ret;
				}
			}				
			switch(tCfgsplit.fundtype)
			{
				case FUNDTYPE_BOARD:						//搭伙费
					tAccountCr.cur_frozebala =D4U5(tAccountCr.cur_frozebala- tTradelog->op_fee,6);
					break;
				default:
					tAccountCr.cur_freebala =D4U5(tAccountCr.cur_freebala- tTradelog->op_fee,6);	//可用余额
					//更新卡余额
					if(USE_CARD_TYPE_ONLINE==revacc->iUseCardFlag)
					{
						getsysdatetime(tAccountCr.reserve_1);
						if(revacc->iTradeCnt>0)
							tAccountCr.consume_count=revacc->iTradeCnt;			//消费次数增加
						
						if(amtcmp(revacc->dOutCardBala,0)>=0)
						{
							revacc->dOutCardBala=D4U5(revacc->dOutCardBala -tTradelog->op_fee,2);
							tAccountCr.card_balance=revacc->dOutCardBala;							//账户卡余额
						}
					}
					else if(USE_CARD_TYPE_NULL==revacc->iUseCardFlag)
					{	
					    strcpy(sTxDateandtime,revacc->sTxDate);
						strcat(sTxDateandtime,revacc->sTxTime);
						revacc->dOutCardBala=D4U5(revacc->dOutCardBala - tTradelog->op_fee,2);		
						if((tAccountCr.consume_count<=revacc->iTradeCnt)||(strncmp(sTxDateandtime,tAccountCr.reserve_1,14)>0))
						{
							strcpy(tAccountCr.reserve_1,revacc->sTxDate);
							tAccountCr.card_balance=D4U5(revacc->dOutCardBala ,2);			//账户卡余额
						}
					}
					break;
			}
		}
		else
		{				
			tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala-tTradelog->op_fee,6);						//当前总余额
			tAccountCr.cur_freebala=D4U5(tAccountCr.cur_freebala-tTradelog->op_fee,6) ;					//当前可用余额
		}
	}
	
	ret = DB_t_aif_account_update_lock_by_cur(&tAccountCr);
	if (ret)
	{
		writelog(LOG_ERR, "update account err[%d] account[%s]", ret,tAccountCr.account_id);
		if (DB_NOTFOUND == ret)
			return E_ACTNO_NOT_EXIST;
		else
			return E_DB_ACCOUNT_U;
	}
	DB_t_aif_account_free_lock_cur();

	des2src(tTradelogDb.operate_date,revacc->sTxDate);
	des2src(tTradelogDb.operate_time,revacc->sTxTime);
	des2src(tTradelogDb.collect_date,revacc->sTxDate);
	des2src(tTradelogDb.collect_time,revacc->sTxTime);
	des2src(tTradelogDb.enteract_date,revacc->sTxDate);
	des2src(tTradelogDb.enteract_time,revacc->sTxTime);
	des2src(tTradelogDb.check_oper,revacc->sChkOper);
	des2src(tTradelogDb.record_oper,revacc->sMdeOper);
	tTradelogDb.serino = revacc->iRevSeriNo;
	tTradelogDb.op_fee = -tTradelogDb.op_fee;
	tTradelogDb.maindevice_id = revacc->maindevice_id;
	tTradelogDb.device_id = 0;
	ret = DB_t_tif_tradelog_add(&tTradelogDb);
	if (ret)
	{
		writelog(LOG_ERR, "add ArrTradelog err[%d] seri_no[%d],seri_type[%d],fee_type[%d],act_id[%s]", ret,tTradelogDb.serino,tTradelogDb.seri_type,
			tTradelogDb.fee_type,tTradelogDb.act_id);
		return E_DB_TRADELOG_I;
	}

	memcpy(&tTradelogCr,&tTradelogDb,sizeof tTradelogCr);
	
	tTradelogCr.new_fee = tAccountCr.cur_bala;			//贷方帐户余额
	tTradelogCr.cur_frozebala=tAccountCr.cur_frozebala;		//冻结金额
	des2src(tTradelogCr.act_id,tTradelogDb.other_actid);
	des2src(tTradelogCr.subno,tTradelogDb.other_subno);
	des2src(tTradelogCr.other_actid,tTradelogDb.act_id);
	des2src(tTradelogCr.other_subno,tTradelogDb.subno);
	tTradelogCr.outorin = DBCR_CREDIT;
	ret = DB_t_tif_tradelog_add(&tTradelogCr);
	if (ret)
	{
		writelog(LOG_ERR, "add ArrTradelog err[%d] seri_no[%d],seri_type[%d],fee_type[%d],act_id[%s]", ret,tTradelogCr.serino,tTradelogCr.seri_type,
			tTradelogCr.fee_type,tTradelogCr.act_id);
		return E_DB_TRADELOG_I;
	}
	return 0;
}
Exemplo n.º 4
0
int F841606(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	int i=0;
	int iCnt=0;
	int flag=0;
	T_t_custtmp	 tCustomerTmp;
	T_t_feetype tFeetype;
	T_t_custtype tCusttype;
	T_t_dept tDept;
	T_t_area tArea;
	T_t_specialty tSpecialty;
	
	
	ST_CPACK aPack;
	ST_PACK InPack;
	ST_PACK *out_pack = &(aPack.pack);

	memset(&tCustomerTmp,0,sizeof(tCustomerTmp));
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_SCUST_LIMIT,F_VSMESS,0);

	tCustomerTmp.impseqno=rPack->lvol4;
	if(1==tCustomerTmp.impseqno)
	{
		flag=1;
		//取批次号
		getsysdatetime(tCustomerTmp.batchno);
	}
	else
	{
		des2src(tCustomerTmp.batchno,rPack->scust_limit);
		if(strlen(tCustomerTmp.batchno)!=14)
		{
			*pRetCode=E_INPUT_BATCH_NO;
			goto L_RETU;
		}
	}
	if(strlen(rPack->semail) < 0)
	{
		*pRetCode = E_INPUT_DATA_INVAILD;
		sprintf(szMsg,"当前客户信息姓名为空!");
		goto L_RETU;
	}
	/*
	memset(&tFeetype,0,sizeof tFeetype);
	ret = DB_t_feetype_read_by_feetype(rPack->lvol2,&tFeetype);
	if(ret)
	{
		*pRetCode = E_INPUT_DATA_INVAILD;
		sprintf(szMsg,"当前客户[%s]收费类别[%d]不正确",rPack->semail
			,rPack->lvol2);
		goto L_RETU;
	}
	*/
	memset(&tCusttype,0,sizeof tCusttype);
	ret = DB_t_custtype_read_by_custtype(rPack->lvol0,&tCusttype);
	if(ret)
	{
		*pRetCode = E_INPUT_DATA_INVAILD;
		sprintf(szMsg,"当前客户[%s]客户类别[%d]不正确",rPack->semail
			,rPack->lvol0);
		goto L_RETU;
	}

	memset(&tArea,0,sizeof tArea);
	char areacode[4];
	sprintf(areacode,"%d",rPack->lvol1);
	ret = DB_t_area_read_by_areacode(areacode,&tArea);
	if(ret)
	{
		*pRetCode = E_INPUT_DATA_INVAILD;
		sprintf(szMsg,"当前客户[%s]校区编号[%d]不正确",rPack->semail
			,rPack->lvol1);
		goto L_RETU;
	}

	if(strlen(rPack->smarket_code) > 0)
	{
		if(is_validate_sexno(rPack->smarket_code[0]))
		{
			*pRetCode = E_INPUT_DATA_INVAILD;
			sprintf(szMsg,"当前客户[%s]性别编号[%s]不正确",rPack->semail
				,rPack->smarket_code);
			goto L_RETU;
		}
	}
	memset(&tDept,0,sizeof tDept);
	if(strlen(rPack->sname2) > 0)
	{
		ret = DB_t_dept_read_by_deptcode(rPack->sname2,&tDept);
		if(ret)
		{
			if(DB_NOTFOUND == ret)
			{
				*pRetCode = E_INPUT_DATA_INVAILD;
				sprintf(szMsg,"当前客户[%s]部门编号[%s]不正确",rPack->semail
					,rPack->sname2);
			}
			else
				*pRetCode = E_DB_AREA_R;
			goto L_RETU;
		}
	}


	memset(&tSpecialty,0,sizeof tSpecialty);
	if(strlen(rPack->scust_no2)>0)
	{
		ret= DB_t_specialty_read_by_specialtycode(rPack->scust_no2,&tSpecialty);
		if(ret)
		{
			if(DB_NOTFOUND == ret)
			{
				*pRetCode = E_INPUT_DATA_INVAILD;
				sprintf(szMsg,"当前客户[%s]专业编号[%s]不正确",rPack->semail
					,rPack->scust_no2);
			}
			else
				*pRetCode = E_DB_SPECIALTY_R;
			goto L_RETU;
		}
	}
	des2src(tCustomerTmp.stuempno,rPack->scust_auth);
	des2src(tCustomerTmp.custname,rPack->semail);
	tCustomerTmp.custtype=rPack->lvol0;
	tCustomerTmp.feetype=rPack->lvol2;
	des2src(tCustomerTmp.sex,rPack->smarket_code);
	des2src(tCustomerTmp.idno,rPack->scust_auth2);
	des2src(tCustomerTmp.tel,rPack->sphone);
	des2src(tCustomerTmp.areacode,rPack->sbranch_code0);
	des2src(tCustomerTmp.deptcode,rPack->sname2);
	des2src(tCustomerTmp.specialtycode,rPack->scust_no2);
	des2src(tCustomerTmp.indate,rPack->sdate0);
	des2src(tCustomerTmp.outdate,rPack->sdate1);
	des2src(tCustomerTmp.opercode,rPack->sorder0);
	des2src(tCustomerTmp.classcode,rPack->sorder0);

	ret=DB_t_custtmp_add(&tCustomerTmp);
	if(SQLCODE)
	{
		if(DB_REPEAT==SQLCODE)
		{
		}
		else
		{
			writelog(LOG_ERR,"batchno[%s]seqno[%d]",tCustomerTmp.batchno,tCustomerTmp.impseqno);
			*pRetCode=E_DB_CUSTOMER_TMP_I;
			goto L_RETU;
		}
	}
	return 0;
L_RETU:
	return -1;
}
Exemplo n.º 5
0
int F848020(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	int i=0;
	int iCnt=0;
	int flag=0;
	T_t_cif_customer_tmp	tCustomerTmp;
	T_t_cif_customer_tmp	tCustomerTmpOut;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	memset(&tCustomerTmp,0,sizeof(tCustomerTmp));
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_SCUST_LIMIT,F_VSMESS,0);
#ifdef DEBUG
	writelog(LOG_DEBUG,"stuemp_no      :scust_auth     [%s]",rPack->scust_auth);
	writelog(LOG_DEBUG,"status      :scust_type        [%s]",rPack->scust_type);
#endif

	tCustomerTmp.seqno=rPack->lvol1;
	if(strlen(rPack->scust_no)<1)
	{
		*pRetCode=E_INPUT_OPER_NULL;
		goto L_RETU;
	}
	if(1==tCustomerTmp.seqno)
	{
		flag=1;
		//取批次号
		getsysdatetime(tCustomerTmp.batch_no);
		ret=DB_t_cif_customer_tmp_del_by_oper_code(rPack->scust_no);
		if(ret)
		{
			if(DB_NOTFOUND!=ret)
			{
				*pRetCode=E_DB_CUSTOMER_TMP_D;
				goto L_RETU;
			}
		}
	}
	else
	{
		des2src(tCustomerTmp.batch_no,rPack->scust_limit);
		if(strlen(tCustomerTmp.batch_no)!=14)
		{
			*pRetCode=E_INPUT_BATCH_NO;
			goto L_RETU;
		}
	}
	des2src(tCustomerTmp.stuemp_no,rPack->scust_auth);
	des2src(tCustomerTmp.oper_code,rPack->scust_no);
	if(strlen(tCustomerTmp.stuemp_no) == 0)
	{
		*pRetCode = E_INPUT_STUEMP_NO;
		sprintf(szMsg,"第%d条记录学工号为空",tCustomerTmp.seqno);
		goto L_RETU;
	}
	ret=DB_t_cif_customer_tmp_add(&tCustomerTmp);
	if(ret)
	{
		if(DB_REPEAT==ret)
		{
			if(1==tCustomerTmp.seqno)
			{
				//如果插入有冲突,则再重新生成新的批次号
				for(i=0;i<3;i++)
				{
					sleep(1);
					getsysdatetime(tCustomerTmp.batch_no);
					ret=DB_t_cif_customer_tmp_add(&tCustomerTmp);
					if(ret)
					{
						if(DB_REPEAT==SQLCODE)
							continue;
						else
						{
							*pRetCode=E_DB_CUSTOMER_TMP_I;
							goto L_RETU;
						}
					}
					break;
				}
				if(i>=3)
				{
					writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tCustomerTmp.batch_no,tCustomerTmp.seqno);
					*pRetCode=E_DB_CUSTOMER_TMP_E;
					goto L_RETU;
				}
			}
			else
			{
				writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tCustomerTmp.batch_no,tCustomerTmp.seqno);
				*pRetCode=E_DB_CUSTOMER_TMP_E;
				goto L_RETU;
			}
		}
		else
		{
			writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tCustomerTmp.batch_no,tCustomerTmp.seqno);
			*pRetCode=E_DB_CUSTOMER_TMP_I;
			goto L_RETU;
		}
	}
	if(rPack->scust_type[0]=='1')
	{
		//最后一条,开始把临时表数据导入到客户表
		writelog(LOG_DEBUG,"导入第%d记录,批次号:%s,学号:%s",tCustomerTmp.seqno,tCustomerTmp.batch_no,tCustomerTmp,tCustomerTmp.stuemp_no);
		iCnt=0;
		ret=DB_t_cif_customer_tmp_open_select_by_c0_and_batch_no(tCustomerTmp.batch_no);
		while(1)
		{
			memset(&tCustomerTmpOut,0,sizeof(tCustomerTmpOut));
			ret=DB_t_cif_customer_tmp_fetch_select_by_c0(&tCustomerTmpOut);
			if(ret)
			{
				if(DB_NOTFOUND==ret)
					break;
				else
				{
					*pRetCode=E_DB_CUSTOMER_TMP_R;
					goto L_RETU;
				}
			}
			//更新客户表
			ret=UpdCustomerBatch_noByStuemp_no(tCustomerTmpOut.stuemp_no,tCustomerTmp.batch_no);
			if(ret)
			{
				writelog(LOG_ERR,"UpdCustomerBatch_noByStuemp_no ret[%d]",ret);
				DB_t_cif_customer_tmp_close_select_by_c0();
				*pRetCode=ret;
				sprintf(szMsg,"批次号%s,第%d条学号为%s的记录有误",tCustomerTmpOut.batch_no,tCustomerTmpOut.seqno,tCustomerTmpOut.stuemp_no);
				goto L_RETU;
			}
			++iCnt;
		}
		sprintf(out_pack->vsmess,"导入批次号:%s,共成功更新客户信息表%d条记录",tCustomerTmp.batch_no,iCnt);
		flag=2;
	}
	if(flag!=2)
	{
		sprintf(out_pack->vsmess,"导入第%d记录,批次号:%s,学号:%s",tCustomerTmp.seqno,tCustomerTmp.batch_no,tCustomerTmp.stuemp_no);
	}
	des2src(out_pack->scust_limit,tCustomerTmp.batch_no);
	PutRow(handle,out_pack,pRetCode,szMsg);
	writelog(LOG_DEBUG,out_pack->vsmess);
	return 0;
L_RETU:
	return -1;
}
Exemplo n.º 6
0
static int do_848256(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	T_t_door_holiday holiday;
	T_t_door_holiday_times times;
	T_t_door_times_group tgroup;
	int ret;

	memset(&holiday,0,sizeof holiday);
	memset(&times,0,sizeof times);
	memset(&tgroup,0,sizeof tgroup);

	if(unlike_tbl_id(in_pack->lvol0))
		return E_INPUT_ERROR;

	ret = IsInvalidDateTime(in_pack->sdate0,"YYYYMMDD");
	if(ret)
	{
		sprintf(szMsg,"日期格式错误[%s]",in_pack->sdate0);
		writelog(LOG_ERR,szMsg);
		return ret;
	}

	if(unlike_tbl_id(in_pack->lvol1))
	{
		sprintf(szMsg,"日期[%s] 需选择时间段组",in_pack->sdate0);
		writelog(LOG_ERR,szMsg);
		return E_INPUT_ERROR;
	}
	
	ret = DB_t_door_holiday_read_by_holiday_id(in_pack->lvol0,&holiday);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			return E_DB_DOOR_HOLIDAY_N;
		}
		return E_DB_DOOR_HOLIDAY_R;
	}

	ret = DB_t_door_times_group_read_by_tgid(in_pack->lvol1,&tgroup);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			return E_DB_DOOR_TIME_GROUP_N;
		return E_DB_DOOR_TIME_GROUP_R;
	}
	
	if(in_pack->sstatus0[0] == '1'
	|| in_pack->sstatus0[0] == '3' )
	{
		ret = DB_t_door_holiday_times_del_by_hid(in_pack->lvol0);
		if(ret)
		{
			if(ret != DB_NOTFOUND)
				return E_DB_DOOR_HOLIDAY_TIME_D;
		}
	}
	times.hid = in_pack->lvol0;
	des2src(times.h_date,in_pack->sdate0);
	times.time_grp_id = in_pack->lvol1;
	times.flag = DOOR_FLAG_NORMAL;
	getsysdatetime(times.last_update);

	ret = DB_t_door_holiday_times_add(&times);
	if(ret)
	{
		if(DB_REPEAT == ret)
		{
			// 更新
			ret = DB_t_door_holiday_times_update_by_hid_and_h_date(
			in_pack->lvol0,in_pack->sdate0,&times);
			if(ret)
			{
				writelog(LOG_ERR,"更新节假日设置信息失败,hid[%d] date[%s]"
				,in_pack->lvol0,in_pack->sdate0);
				sprintf(szMsg,"更新节假日[%s] 失败",in_pack->sdate0);
				return E_DB_DOOR_HOLIDAY_TIME_U;
			}
		}
		else
		{
			sprintf(szMsg,"增加时间段[%s] 失败",in_pack->sdate0);
			writelog(LOG_ERR,szMsg);
			return E_DB_DOOR_HOLIDAY_TIME_I;
		}
	}

	if(in_pack->sstatus0[0] == '2'
	||in_pack->sstatus0[0] == '3' )
	{
		// 更新时间段组表
		des2src(holiday.last_update,times.last_update);
		ret = count_times_of_holiday(holiday.holiday_id,&(holiday.day_cnt));
		if(ret)
		{
			sprintf(szMsg,"统计节假日[%s] 时段错误",holiday.holiday_name);
			writelog(LOG_ERR,szMsg);
			return ret;
		}
		ret = DB_t_door_holiday_update_by_holiday_id(holiday.holiday_id,&holiday);
		if(ret)
		{
			
			sprintf(szMsg,"完成节假日设置,更新时间截失败,[%s]",holiday.holiday_name);
			writelog(LOG_ERR,szMsg);
			if(DB_NOTFOUND == ret)
				return E_DB_DOOR_HOLIDAY_N;
			return E_DB_DOOR_HOLIDAY_U;
		}
	}
	return 0;
}
Exemplo n.º 7
0
//int Bank_Transfer(INNER_TRANS_REQUEST * pNode,int serial_no)
int Bank_Trans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg)
{

	int ret=0;
	char temp[6]="";
	int flag=0;
	int i=0;
	int len=0;
	char sMoney[32]="";
	char sSerialno[32]="";

	MSG gsyh_req;
	MSG gsyh_ans;

	ST_CPACK aPack;	
	ST_PACK *out_pack = &(aPack.pack);
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL1,F_SDATE1,F_SCERT_NO,0);

	writelog(LOG_DEBUG,"nanjin icbc Bank_Trans start"); 
	memset(&gsyh_req,0x20,sizeof(gsyh_req));
	memcpy(gsyh_req.head.MsgLength,"0256",4);
	sprintf(gsyh_req.head.TradeType,"%-6s",BANK_GSYH_TRADE_CODE_TRANS);
	sprintf(gsyh_req.head.Sender,"%-7s",BANK_GSYH_SENDER);
	sprintf(gsyh_req.head.Receiver,"%-7s",BANK_GSYH_RECEIVER);
	memset(gsyh_req.head.PINKeySynFlag,0x20,sizeof gsyh_req.head.PINKeySynFlag);
	memset(gsyh_req.head.MACKeySynFlag,0x20,sizeof gsyh_req.head.MACKeySynFlag);
	memset(gsyh_req.head.MAC,0x20,sizeof gsyh_req.head.MAC);

	memset(gsyh_req.body.ReturnCode,0x20,sizeof gsyh_req.body.ReturnCode);
	memset(gsyh_req.body.Message,0x20,sizeof gsyh_req.body.Message);
	memcpy(gsyh_req.body.TradeTime,getsysdatetime(NULL),14);
	//sprintf(sSerialno,"%d",serial_no);
	STRLENCPY(sSerialno,rPack->sholder_ac_no+8,32);
	STRLENCPY(gsyh_req.body.SchoolTransSeq,sSerialno,16);			//本地流水号

	memset(gsyh_req.body.BankTransSeq,0x20,sizeof gsyh_req.body.BankTransSeq);
	STRLENCPY(gsyh_req.body.BankAccNO,rPack->scust_limit2,20);
	STRLENCPY(gsyh_req.body.CampusCard,rPack->sphone,20);	
	STRLENCPY(gsyh_req.body.StudentName,rPack->scust_limit,20);
	STRLENCPY(gsyh_req.body.StudentID,rPack->scust_auth2,18);
	int amt = D2I(rPack->damt0*100);
	sprintf(sMoney,"%012d",amt);
	memcpy(gsyh_req.body.Amount,sMoney,sizeof(gsyh_req.body.Amount));	//交易金额
	memset(gsyh_req.body.Balance,0x20,sizeof gsyh_req.body.Balance);
	memset(gsyh_req.body.BankCardPwd,0x20,sizeof gsyh_req.body.BankCardPwd);

	out_pack->lvol1 = 1;	
	*pRetCode = 0;
	
	Trace_Bank_Package_GSYH(&gsyh_req,"send query bank package");
	ret=send_to_and_recv_from_bank(BANK_GSYH,(char*)&gsyh_req,sizeof(gsyh_req),(char*)&gsyh_ans,sizeof(gsyh_ans),rPack);
	if(ret)
	{
		writelog(LOG_ERR,"send_to_and_recv_from_bank error,bank_id=[%d],errcode=[%d]",BANK_GSYH,ret);
		return E_TRANS_BANK_NOANSWER;
	}

	Trace_Bank_Package_GSYH(&gsyh_ans,"receivce query bank package");
	if(0!=strncmp(gsyh_ans.body.ReturnCode,"0000",4))
	{
		strncpy(szMsg, gsyh_ans.body.Message,sizeof(gsyh_ans.body.Message) );
		writelog(LOG_ERR,"Receive data return code error,error code= [%4.4s]msg[%24.24s]",gsyh_ans.body.ReturnCode,gsyh_ans.body.Message);
		//strncpy(pNode->Reserve3,gsyh_ans.body.Message,24);
		//pNode->Reserve3[24]=0;
		memcpy(temp,gsyh_ans.body.ReturnCode,4);
		temp[4]=0;
		
		switch(atoi(temp))
		{
			case 1:		//银行卡挂失
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_LOST);
				*pRetCode=E_TRANS_BANKCARD_LOST;
			case 2:		//银行卡状态错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_STATERR);
				*pRetCode=E_TRANS_BANKACC_STATERR;
			case 3:		//银行卡金额不足
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_NOMONEY);
				*pRetCode=E_TRANS_BANKACC_NOMONEY;
			case 4:		//银行密码错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
				*pRetCode=E_TRANS_BANKCARD_PWDERR;
			case 98:		//银行处理超时
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANK_NODECIDE);
				*pRetCode=E_TRANS_BANK_NOANSWER;
			case 99:		//其他错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
				*pRetCode=E_TRANS_UNKNOW_ERROR;
			default:		//其他未知错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_UNKNOW_ERROR);
				*pRetCode=E_TRANS_UNKNOW_ERROR;
		}
		return -1;
	}		
	
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;

}
Exemplo n.º 8
0
static int pack_body(TRANS& trans,std::string& body)
{
    int ret = 0;

	gReader.fetchRow();

	//生成交易流水号并记录
    ret = GetNewRefno(trans.refno);
    if (ret)
    {
        return ret;
    }

	   TiXmlDocument doc;
    {
        TiXmlElement root("ROOT");
        doc.InsertEndChild(root);
    }
    char dt[15] = {0};
    getsysdatetime(dt);
    string now(dt);
	stringstream ss;

	TiXmlNode& root = *(doc.FirstChild());

 	//版本号
	ec_add_xml_node_value(root,"VERSION", "010101" );

	//交易代码
	ec_add_xml_node_value(root,"TRANS_TYPE", "120321" );

	//动作代码
	ec_add_xml_node_value(root,"ACTION_TYPE", "1");

	/*//响应代码
	ec_add_xml_node_value(root,"RESP_CODE", );*/

	//登录身份类型
	ec_add_xml_node_value(root,"LOGIN_TYPE", "1");

	//交易渠道
	ec_add_xml_node_value(root,"TRANS_SOURCE", "BP");

	//登录机构代码
	ec_add_xml_node_value(root,"LOGIN_INST_CODE", "48080000");

	//交易日期
	{
		string str;
		str.assign(trans.accdate,8);
		ec_add_xml_node_value(root,"TXN_DATE", str);
	}

	//交易时间
	{
		string str;
		str.assign(trans.acctime,6);
		ec_add_xml_node_value(root,"TXN_TIME", str);
	}

	//跟踪号/流水号
	{
		string str;
		str.assign(trans.refno,14);
		//str[6]='0';
		//str[7]='0';
		str=str.substr(6);
		//str.append(1,'1');
		ec_add_xml_node_value(root,"TRACE_NO", str);
	}

	//登录网点代码
	{
		string str;

		ret = get_ec_para(YTCEC_LOGIN_MERCH, str);
		if (ret)
		{
			LOG(ERROR, "中银通登录网点代码未配置");
			return E_COMMON_ERR;
		}
		ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", str);
	}
	//ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", "J001");

	//登录操作员代码
	{
		string str;

		ret = get_ec_para(YTCEC_LOGIN_USER, str);
		if (ret)
		{
			LOG(ERROR, "中银通登录操作员代码未配置");
			return E_COMMON_ERR;
		}
		ec_add_xml_node_value(root,"LOGIN_USER_CODE", str);
	}
	//ec_add_xml_node_value(root,"LOGIN_USER_CODE", "A5");

	std::string	ocard_no	;	//	旧卡卡号
	std::string	validtid	;	//	持卡人身份验证
	std::string	password	;	//	密码
	std::string	idcode	;	//	客户证件类型
	std::string	idtype	;	//	客户证件号码
	std::string	name	;	//	客户名
	std::string	familyname	;	//	客户姓
	std::string	name_spell	;	//	拼音名
	std::string	familyname_spell	;	//	拼音姓
	std::string	birthday	;	//	生日
	std::string	telphone	;	//	电话号码
	std::string	mobile	;	//	手机
	std::string	corpname	;	//	工作单位
	std::string	address	;	//	地址
	std::string	postcode	;	//	邮编
	std::string	email	;	//	电邮
	std::string	roomno	;	//	房间
	std::string	floorno	;	//	楼层
	std::string	homeaddr	;	//	住址
	std::string	estate	;	//	ESTATE
	std::string	street	;	//	街道
	std::string	district	;	//	DISTRICT
	std::string	area	;	//	地区
	std::string	newcardno	;	//	新卡号
	std::string	selectpin	;	//	卡密码选择
	std::string	activeswitch	;	//	是否激活
	std::string	feeswitch	;	//	收费标志
	std::string	fee	;	//	换卡费金额
	std::string	paytype	;	//	付款方式
	std::string	creditcardno	;	//	信用卡号
	std::string	memocode	;	//	回执号码
	std::string	reason	;	//	换卡原因
	std::string newcardfield55; //55域
    string  reserved;       //保留

    //旧卡卡号
    {
            ss.str("");
            COL2VAR(ocard_no);
            ss << ocard_no;
            ec_add_xml_node_value(root,"PRIMARY_ACCT_NUM",ss.str());
    }

    //持卡人身份验证
    {
            ss.str("");
            COL2VAR(validtid);
            ss << validtid;
            ec_add_xml_node_value(root,"VALIDTID",ss.str());
    }

    //密码
    {
            ss.str("");
            COL2VAR(password);
            ss << password;
            ec_add_xml_node_value(root,"CUSTPASSWORD",ss.str());
    }

    //客户证件类型
    {
            ss.str("");
            COL2VAR(idcode);
            ss << idcode;
            ec_add_xml_node_value(root,"IDTYPE",ss.str());
    }

    //客户证件号码
    {
            ss.str("");
            COL2VAR(idtype);
            ss << idtype;
            ec_add_xml_node_value(root,"IDCODE",ss.str());
    }

    //客户名
    {
            ss.str("");
            COL2VAR(name);
            ss << name;
            ec_add_xml_node_value(root,"NAME",ss.str());
    }

    //客户姓
    {
            ss.str("");
            COL2VAR(familyname);
            ss << familyname;
            ec_add_xml_node_value(root,"SNAME",ss.str());
    }

    //拼音名
    {
            ss.str("");
            COL2VAR(name_spell);
            ss << name_spell;
            ec_add_xml_node_value(root,"SPELL_NAME",ss.str());
    }

    //拼音姓
    {
            ss.str("");
            COL2VAR(familyname_spell);
            ss << familyname_spell;
            ec_add_xml_node_value(root,"SPELL_SNAME",ss.str());
    }

    //生日
    {
            ss.str("");
            COL2VAR(birthday);
            ss << birthday;
            ec_add_xml_node_value(root,"BIRTHDAY",ss.str());
    }

    //电话号码
    {
            ss.str("");
            COL2VAR(telphone);
            ss << telphone;
            ec_add_xml_node_value(root,"COPHONE",ss.str());
    }

    //手机
    {
            ss.str("");
            COL2VAR(mobile);
            ss << mobile;
            ec_add_xml_node_value(root,"MOBILE",ss.str());
    }

    //工作单位
    {
            ss.str("");
            COL2VAR(corpname);
            ss << corpname;
            ec_add_xml_node_value(root,"BUS_NAME",ss.str());
    }

    //地址
    {
            ss.str("");
            COL2VAR(address);
            ss << address;
            ec_add_xml_node_value(root,"ADDR",ss.str());
    }

    //邮编
    {
            ss.str("");
            COL2VAR(postcode);
            ss << postcode;
            ec_add_xml_node_value(root,"POST",ss.str());
    }

    //电邮
    {
            ss.str("");
            COL2VAR(email);
            ss << email;
            ec_add_xml_node_value(root,"EMAIL",ss.str());
    }

    //房间
    {
            ss.str("");
            COL2VAR(roomno);
            ss << roomno;
            ec_add_xml_node_value(root,"ROOM",ss.str());
    }

    //楼层
    {
            ss.str("");
            COL2VAR(floorno);
            ss << floorno;
            ec_add_xml_node_value(root,"FLOOR",ss.str());
    }

    //住址
    {
            ss.str("");
            COL2VAR(homeaddr);
            ss << homeaddr;
            ec_add_xml_node_value(root,"BUILDING",ss.str());
    }

    //ESTATE
    {
            ss.str("");
            COL2VAR(estate);
            ss << estate;
            ec_add_xml_node_value(root,"ESTATE",ss.str());
    }

    //街道
    {
            ss.str("");
            COL2VAR(street);
            ss << street;
            ec_add_xml_node_value(root,"STREET",ss.str());
    }

    //DISTRICT
    {
            ss.str("");
            COL2VAR(district);
            ss << district;
            ec_add_xml_node_value(root,"DISTRICT",ss.str());
    }

    //地区
    {
            ss.str("");
            COL2VAR(area);
            ss << area;
            ec_add_xml_node_value(root,"REGION",ss.str());
    }

    //新卡号
    {
            ss.str("");
            COL2VAR(newcardno);
            ss << newcardno;
            ec_add_xml_node_value(root,"NCARD_NO",ss.str());
    }

    //卡密码选择
    {
            ss.str("");
            COL2VAR(selectpin);
            ss << selectpin;
            ec_add_xml_node_value(root,"SELECTPIN",ss.str());
    }

    //是否激活
    {
            ss.str("");
            COL2VAR(activeswitch);
            ss << activeswitch;
            ec_add_xml_node_value(root,"ACTIVE",ss.str());
    }

    //收费标志
    {
            ss.str("");
            COL2VAR(feeswitch);
            ss << feeswitch;
            ec_add_xml_node_value(root,"FEEFLG",ss.str());
    }

    //换卡费金额
    {
            ss.str("");
            COL2VAR(fee);
            ss << fee;
            ec_add_xml_node_value(root,"FEE",ss.str());
    }

    //付款方式
    {
            ss.str("");
            COL2VAR(paytype);
            ss << paytype;
            ec_add_xml_node_value(root,"PAYMENTWAY",ss.str());
    }

    //信用卡号
    {
            ss.str("");
            COL2VAR(creditcardno);
            ss << creditcardno;
            ec_add_xml_node_value(root,"CREDITNO",ss.str());
    }

    //回执号码
    {
            ss.str("");
            COL2VAR(memocode);
            ss << memocode;
            ec_add_xml_node_value(root,"MEMOCODE",ss.str());
    }

    //换卡原因
    {
            ss.str("");
            COL2VAR(reason);
            ss << reason;
            ec_add_xml_node_value(root,"REAS",ss.str());
    }

	//IC卡数据域(对应银联标准中55域,下列都是其子域)

	ec_add_xml_node_value(root,"ICC_DATA", "");
	TiXmlNode* icc_data;

	ec_xml_get_xml_childnode(root,"ICC_DATA",&icc_data);

	//解析55域字段,存入map

	map<std::string,std::string> tag_map;
	COL2VAR(newcardfield55);
	string field55(newcardfield55);
	LOG(DEBUG, "55"<<newcardfield55);
	string tag_field_name(""),tag_field_value("");

    while (field55.length()>0)
    {
        get_first_field(field55,tag_field_name,tag_field_value);
		LOG(DEBUG, "tag_field_name"<<tag_field_name<<"tag_field_value"<<tag_field_value);
        tag_map[tag_field_name]=tag_field_value;

    }

	//交易计数器
    ec_add_xml_node_value(*icc_data, "TAG_9F36", tag_map["9F36"]);


    //应用密文
    ec_add_xml_node_value(*icc_data, "TAG_9F26", tag_map["9F26"]);


    //发卡行自定义数据
    ec_add_xml_node_value(*icc_data, "TAG_9F10", tag_map["9F10"]);


    //授权金额
    ec_add_xml_node_value(*icc_data, "TAG_9F02", tag_map["9F02"]);


    //其他金额
    ec_add_xml_node_value(*icc_data, "TAG_9F03", tag_map["9F03"]);


    //终端国家代码
    ec_add_xml_node_value(*icc_data, "TAG_9F1A", tag_map["9F1A"]);


    //终端验证结果
    ec_add_xml_node_value(*icc_data, "TAG_95", tag_map["95"]);


    //交易货币代码
    ec_add_xml_node_value(*icc_data, "TAG_5F2A", tag_map["5F2A"]);


    //交易日期
    ec_add_xml_node_value(*icc_data, "TAG_9A", tag_map["9A"]);


    //交易类型
    ec_add_xml_node_value(*icc_data, "TAG_9C", tag_map["9C"]);


    //不可预知数
    ec_add_xml_node_value(*icc_data, "TAG_9F37", tag_map["9F37"]);


    //应用交互特征
    ec_add_xml_node_value(*icc_data, "TAG_82", tag_map["82"]);


    //第一币种货币代码
    ec_add_xml_node_value(*icc_data, "TAG_9F71", tag_map["9F71"]);


    //第一币种余额
    ec_add_xml_node_value(*icc_data, "TAG_9F79", tag_map["9F79"]);


	//保留域
	{
		ss.str("");
		COL2VAR(reserved);
		ss<<reserved;
		ec_add_xml_node_value(root,"RESERVED",ss.str());
	}

	//报文鉴别码
	// ec_add_xml_node_value(root, "MESG_AUTHN_CODE", "87AE");
    ec_bank_any_ytc::calc_trans_mac(&root);

	TiXmlPrinter printer;
    doc.Accept(&printer);

	char xml_header[100]="<?xml version='1.0' encoding='GBK'?>\n";
	body.append(xml_header);
    body += printer.CStr();
	return 0;
}
Exemplo n.º 9
0
int Bank_Transfer(INNER_TRANS_REQUEST * pNode,int serial_no)
{

	int ret=0;
	char temp[6]="";
	int flag=0;
	int i=0;
	int len=0;
	char sMoney[32]="";
	char sSerialno[32]="";

	MSG gsyh_req;
	MSG gsyh_ans;
	
	memset(&gsyh_req,0x20,sizeof gsyh_req);
	memset(&gsyh_req,0x20,sizeof gsyh_req);
	

	//分析上传银行卡号属于哪个银行,根据银行标志,发送给不同的银行
	//转到transinfo外层去处理
	for(i=0;i<=g_Bank.BankCount;i++)
	{
		if(i==g_Bank.BankCount)	
		{
				writelog(LOG_ERR,"E_TRANS_BANK_CARD_NONSUPPORT,i=[%d]!g_Bank.BankCount=[%d]",i,g_Bank.BankCount);
				return E_TRANS_BANK_CARD_NONSUPPORT;
		}
		for(int j=0;j<MAX_RANGE;j++)
		{
			//printf("i=[%d],j=[%d],bankcard=[%s],range=[%s],len=[%d]]\n",i,j,pNode->BankCardNo,g_Bank.BankUnit[i].szBankCardRange[j],strlen(g_Bank.BankUnit[i].szBankCardRange[j]));
			if(0==strlen(g_Bank.BankUnit[i].szBankCardRange[j]))	break;
			if(0==memcmp(pNode->BankCardNo,g_Bank.BankUnit[i].szBankCardRange[j]
				,strlen(g_Bank.BankUnit[i].szBankCardRange[j])))
			{
				flag=1;
				g_Bank.cur_bankid=i;
				break;
			}
		}
		if(flag==1)	
			break;
	}
	printf("Bank_Transfer start!i=[%d],g_Bank.BankUnit[i].iBankID=[%d]\n",i,g_Bank.BankUnit[i].iBankID);
	
	//中国银行
	if(g_Bank.BankUnit[i].iBankID==BANK_ZGYH)
	{
		return E_TRANS_BANK_CARD_NONSUPPORT;
	}
	//工商银行
	else if(g_Bank.BankUnit[i].iBankID==BANK_GSYH)
	{

		memset(&gsyh_req,0x20,sizeof(gsyh_req));
		memcpy(gsyh_req.head.MsgLength,"0256",4);
		sprintf(gsyh_req.head.TradeType,"%-6s",BANK_GSYH_TRADE_CODE_TRANS);
		sprintf(gsyh_req.head.Sender,"%-7s",BANK_GSYH_SENDER);
		sprintf(gsyh_req.head.Receiver,"%-7s",BANK_GSYH_RECEIVER);
		memset(gsyh_req.head.PINKeySynFlag,0x20,sizeof gsyh_req.head.PINKeySynFlag);
		memset(gsyh_req.head.MACKeySynFlag,0x20,sizeof gsyh_req.head.MACKeySynFlag);
		memset(gsyh_req.head.MAC,0x20,sizeof gsyh_req.head.MAC);

		memset(gsyh_req.body.ReturnCode,0x20,sizeof gsyh_req.body.ReturnCode);
		memset(gsyh_req.body.Message,0x20,sizeof gsyh_req.body.Message);
		memcpy(gsyh_req.body.TradeTime,getsysdatetime(NULL),14);
		sprintf(sSerialno,"%d",serial_no);
		memcpy(gsyh_req.body.SchoolTransSeq,sSerialno,strlen(sSerialno));			//本地流水号

		memset(gsyh_req.body.BankTransSeq,0x20,sizeof gsyh_req.body.BankTransSeq);
		memcpy(gsyh_req.body.BankAccNO,pNode->BankCardNo,strlen(pNode->BankCardNo));
		memcpy(gsyh_req.body.CampusCard,pNode->Reserve1,strlen(pNode->Reserve1));	
		memcpy(gsyh_req.body.StudentName,pNode->Reserve2,strlen(pNode->Reserve2));
		memcpy(gsyh_req.body.StudentID,pNode->Reserve3,strlen(pNode->Reserve3));
		sprintf(sMoney,"%012d",atoi(pNode->TransMoney));
		memcpy(gsyh_req.body.Amount,sMoney,sizeof(gsyh_req.body.Amount));	//交易金额
		memset(gsyh_req.body.Balance,0x20,sizeof gsyh_req.body.Balance);
		memset(gsyh_req.body.BankCardPwd,0x20,sizeof gsyh_req.body.BankCardPwd);

		Trace_Bank_Package_GSYH(&gsyh_req,"Send query bank package:工商银行");
		ret=send_to_and_recv_from_bank(BANK_GSYH,(char*)&gsyh_req,sizeof(gsyh_req),(char*)&gsyh_ans,sizeof(gsyh_ans),&g_Bank);
		if(ret)
		{
			writelog(LOG_ERR,"send_to_and_recv_from_bank error,bank_id=[%d],errcode=[%d]",BANK_GSYH,ret);
			return E_TRANS_BANK_NOANSWER;
		}
		Trace_Bank_Package_GSYH(&gsyh_ans,"Receivce query bank package:工商银行");
		if(0!=strncmp(gsyh_ans.body.ReturnCode,"0000",4))
		{
			writelog(LOG_ERR,"Receive data return code error,error code= [%4.4s]msg[%24.24s]",gsyh_ans.body.ReturnCode,gsyh_ans.body.Message);
			strncpy(pNode->Reserve3,gsyh_ans.body.Message,24);
			pNode->Reserve3[24]=0;
			memcpy(temp,gsyh_ans.body.ReturnCode,4);
			temp[4]=0;
			switch(atoi(temp))
			{
				case 1:		//银行卡挂失
					//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_LOST);
					return	E_TRANS_BANKCARD_LOST;
				case 2:		//银行卡状态错误
					//sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_STATERR);
					return	E_TRANS_BANKACC_STATERR;
				case 3:		//银行卡金额不足
					//sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_NOMONEY);
					return	E_TRANS_BANKACC_NOMONEY;
				case 4:		//银行密码错误
					//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
					return	E_TRANS_BANKCARD_PWDERR;
				case 98:		//银行处理超时
					//sprintf(pNode->RetCode,"%d",E_TRANS_BANK_NODECIDE);
					return	E_TRANS_BANK_NOANSWER;
				case 99:		//其他错误
					//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
					return	E_TRANS_UNKNOW_ERROR;
				default:		//其他未知错误
					//sprintf(pNode->RetCode,"%d",E_TRANS_UNKNOW_ERROR);
					return	E_TRANS_UNKNOW_ERROR;
			}
		}

		//填充应答包
		//sprintf(pNode->RetCode,"%d",SUCCEED);
		//memcpy(pNode->Balance,gsyh_ans.TranMoney,sizeof(pNode->Balance));
		//writelog(LOG_INFO,"query bank card balance succeed!bank card money=[%9s]",gsyh_ans.TranMoney);
	}
	//建设银行
	else if(g_Bank.BankUnit[i].iBankID==BANK_JSYH)
	{
		return E_TRANS_BANK_CARD_NONSUPPORT;
	}
	else
	{
		return E_TRANS_BANK_CARD_NONSUPPORT;
	}
	return 0;

}
Exemplo n.º 10
0
static int pack_body(TRANS& trans,std::string& body)
{
    int ret = 0;

	gReader.fetchRow();

	//生成交易流水号并记录
    ret = GetNewRefno(trans.refno);
    if (ret)
    {
        return ret;
    }

	   TiXmlDocument doc;
    {
        TiXmlElement root("ROOT");
        doc.InsertEndChild(root);
    }
    char dt[15] = {0};
    getsysdatetime(dt);
    string now(dt);

	TiXmlNode& root = *(doc.FirstChild());

 	//版本号
	ec_add_xml_node_value(root,"VERSION", "010101" );

	//交易代码
	ec_add_xml_node_value(root,"TRANS_TYPE", "120226" );

	//动作代码
	ec_add_xml_node_value(root,"ACTION_TYPE", "1");

	/*//响应代码
	ec_add_xml_node_value(root,"RESP_CODE", );*/

	//登录身份类型
	ec_add_xml_node_value(root,"LOGIN_TYPE", "1");

	//交易渠道
	ec_add_xml_node_value(root,"TRANS_SOURCE", "BP");

	//登录机构代码
	ec_add_xml_node_value(root,"LOGIN_INST_CODE", "10006");

	//交易日期
	{
		string str;
		str.assign(trans.accdate,8);
		ec_add_xml_node_value(root,"TXN_DATE", str);
	}

	//交易时间
	{
		string str;
		str.assign(trans.acctime,6);
		ec_add_xml_node_value(root,"TXN_TIME", str);
	}

	//跟踪号/流水号
	{
		string str;
		str.assign(trans.refno,14);
		//str[6]='0';
		//str[7]='0';
		str=str.substr(6);
		//str.append(1,'1');
		ec_add_xml_node_value(root,"TRACE_NO", str);
	}

	//受卡机终端标识码

	ec_add_xml_node_value(root,"CARD_ACCPTR_TERMNL_ID", "12345676");

	//登录网点代码
	{
		string str;

		ret = get_ec_para(YTCEC_LOGIN_MERCH, str);
		if (ret)
		{
			LOG(ERROR, "中银通登录网点代码未配置");
			return E_COMMON_ERR;
		}
		ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", str);
	}
	//ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", "J001");

	//登录操作员代码
	{
		string str;

		ret = get_ec_para(YTCEC_LOGIN_USER, str);
		if (ret)
		{
			LOG(ERROR, "中银通登录操作员代码未配置");
			return E_COMMON_ERR;
		}
		ec_add_xml_node_value(root,"LOGIN_USER_CODE", str);
	}
	//ec_add_xml_node_value(root,"LOGIN_USER_CODE", "A5");

	    string  cardno_begin;   //开始卡号
        string  cardno_end;     //结束卡号
        int     cardcnt;        //卡数量
        string  product_group_code;     //产品组代码
        string  product_code;   //产品代码
        int     in_fee_amt;     //内收手续费
        int     out_fee_amt;    //外收手续费
        int     receivable_amt; //应收金额
        int     is_guarantee_deposit;   //是否收取押金
        int     guarantee_deposit;      //押金
        int     is_get_fee;     //是否收费
        int     fee_amt;        //发卡费
        string  idcode; //持卡人证件号码
        string  idtype; //持卡人证件类型
        string  name;   //持卡人名
        string  familyname;     //持卡人姓
        string  name_spell;     //持卡人名-拼音
        string  familyname_spell;       //持卡人姓-拼音
        string  birthday;       //持卡人生日
        string  telphone;       //持卡人电话号码
        string  mobile; //持卡人手机
        string  address;        //持卡人地址
        string  postcode;       //持卡人邮编
        string  email;  //持卡人电邮
        string  corpname;       //持卡人单位名称
        string  comments;       //持卡人备注
        string  reserved;       //保留

	//卡片数量
	{
		stringstream ss;
		COL2VAR(cardcnt);
		ss << cardcnt;
		ec_add_xml_node_value(root,"CARDCOUNT",ss.str());
	}

	//起始卡号
	{
		stringstream ss;
		COL2VAR(cardno_begin);
		ss <<cardno_begin;
		ec_add_xml_node_value(root,"STARTCARD",ss.str());
	}

	//结束卡号
	{
		stringstream ss;
		COL2VAR(cardno_end);
		ss <<cardno_end;
		ec_add_xml_node_value(root,"ENDCARD",ss.str());
	}

	//产品组
	{
		stringstream ss;
		COL2VAR(product_group_code);
		ss <<product_group_code;
		ec_add_xml_node_value(root,"PRD_GRP_CODE",ss.str());
	}

	//产品
	{
		stringstream ss;
		COL2VAR(product_code);
		ss <<product_code;
		ec_add_xml_node_value(root,"PRD_CODE",ss.str());
	}

	//内收手续费
	{
		stringstream ss;
		COL2VAR(in_fee_amt);
		ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<in_fee_amt;
		ec_add_xml_node_value(root,"TOTAL_IN_FEE_AMT",ss.str());
	}

	//外收手续费
	{
		stringstream ss;
		COL2VAR(out_fee_amt);
		ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<out_fee_amt;
		ec_add_xml_node_value(root,"TOTAL_OUT_FEE_AMT",ss.str());
	}

	//应收金额
	{
		stringstream ss;
		COL2VAR(receivable_amt);
		ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<receivable_amt;
		ec_add_xml_node_value(root,"BALAMT",ss.str());
	}

	//是否收取押金
	{
		stringstream ss;
		COL2VAR(is_guarantee_deposit);
		ss <<is_guarantee_deposit;
		ec_add_xml_node_value(root,"PLEDGEFLG",ss.str());
	}

	//押金
	{
		stringstream ss;
		COL2VAR(guarantee_deposit);
		ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<guarantee_deposit;
		ec_add_xml_node_value(root,"PLEDGE",ss.str());
	}

	//是否收费
	{
		stringstream ss;
		COL2VAR(is_get_fee);
		ss <<is_get_fee;
		ec_add_xml_node_value(root,"FEEFLG",ss.str());
	}

	//发卡费
	{
		stringstream ss;
		COL2VAR(fee_amt);
		ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<fee_amt;
		ec_add_xml_node_value(root,"FEE",ss.str());
	}

	//持卡人证件号码
	{
		stringstream ss;
		COL2VAR(idcode);
		ss <<idcode;
		ec_add_xml_node_value(root,"IDCODE",ss.str());
	}

	//持卡人证件类型
	{
		stringstream ss;
		COL2VAR(idtype);
		ss <<idtype;
		ec_add_xml_node_value(root,"IDTYPE",ss.str());
	}

	//持卡人名
	{
		stringstream ss;
		COL2VAR(name);
		ss <<name;
		ec_add_xml_node_value(root,"NAME",ss.str());
	}

	//持卡人姓
	{
		stringstream ss;
		COL2VAR(familyname);
		ss <<familyname;
		ec_add_xml_node_value(root,"SURNAME",ss.str());
	}

	//持卡人拼音名
	{
		stringstream ss;
		COL2VAR(name_spell);
		ss <<name_spell;
		ec_add_xml_node_value(root,"SPELL_NAME",ss.str());
	}

	//持卡人拼音姓
	{
		stringstream ss;
		COL2VAR(familyname_spell);
		ss <<familyname_spell;
		ec_add_xml_node_value(root,"SPELL_SURNAME",ss.str());
	}

	//持卡人生日
	{
		stringstream ss;
		COL2VAR(birthday);
		ss <<birthday;
		ec_add_xml_node_value(root,"BIRTHDAY",ss.str());
	}

	//持卡人电话号码
	{
		stringstream ss;
		COL2VAR(telphone);
		ss<<telphone;
		ec_add_xml_node_value(root,"COPHONE",ss.str());
	}

	//持卡人手机
	{
		stringstream ss;
		COL2VAR(mobile);
		ss<<mobile;
		ec_add_xml_node_value(root,"MOBILE",ss.str());
	}

	//持卡人地址
	{
		stringstream ss;
		COL2VAR(address);
		ss<<address;
		ec_add_xml_node_value(root,"ADDR",ss.str());
	}

	//持卡人邮编
	{
		stringstream ss;
		COL2VAR(postcode);
		ss<<postcode;
		ec_add_xml_node_value(root,"POST",ss.str());
	}

	//持卡人电邮
	{
		stringstream ss;
		COL2VAR(email);
		ss<<email;
		ec_add_xml_node_value(root,"EMAIL",ss.str());
	}

	//持卡人单位名称
	{
		stringstream ss;
		COL2VAR(corpname);
		ss<<corpname;
		ec_add_xml_node_value(root,"COMNAME",ss.str());
	}

	//持卡人备注
	{
		stringstream ss;
		COL2VAR(comments);
		ss<<comments;
		ec_add_xml_node_value(root,"CUSTRES",ss.str());
	}

	//保留域
	{
		stringstream ss;
		COL2VAR(reserved);
		ss<<reserved;
		ec_add_xml_node_value(root,"RESERVED",ss.str());
	}



	//报文鉴别码
	// ec_add_xml_node_value(root, "MESG_AUTHN_CODE", "87AE");
    ec_bank_any_ytc::calc_trans_mac(&root);

	TiXmlPrinter printer;
    doc.Accept(&printer);

	char xml_header[100]="<?xml version='1.0' encoding='GBK'?>\n";
	body.append(xml_header);
    body += printer.CStr();
	return 0;
}
Exemplo n.º 11
0
static int do_848268(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret;
	T_t_door_device_cardlist door_card;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	memset(&aPack,0,sizeof aPack);
	memset(&door_card,0,sizeof door_card);
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL0,F_VSMESS,0);
	
	if(unlike_tbl_id(in_pack->lvol0))
	{
		sprintf(out_pack->vsmess,"警告: 客户号不正确[%d]",in_pack->lvol0);
		out_pack->lvol0 = 0;
		goto L_PUTROW_RET;
	}
	if(unlike_tbl_id(in_pack->lvol1))
	{
		sprintf(out_pack->vsmess,"警告: 门禁号不正确[%d]",in_pack->lvol1);
		out_pack->lvol0 = 0;
		goto L_PUTROW_RET;
	}

	ret = DB_t_door_device_cardlist_read_by_device_id_and_cust_id(
		in_pack->lvol1,in_pack->lvol0,&door_card);

	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			sprintf(out_pack->vsmess,"警告: 客户号[%d]门禁[%d]不存在"
				,in_pack->lvol0,in_pack->lvol1);
			out_pack->lvol0 = 0;
			goto L_PUTROW_RET;
		}
		else
			return E_DB_DOOR_CARDLIST_R;
	}
	// 判断是否已经删除过
	if(door_card.status >= DOOR_FLAG_WAITING_DEL)
	{
		sprintf(out_pack->vsmess,"警告: 客户号[%d]门禁[%d]已被删除"
				,in_pack->lvol0,in_pack->lvol1);
		out_pack->lvol0 = 2;
		goto L_PUTROW_RET;
	}

	getsysdatetime(door_card.update_time);
	door_card.status = DOOR_FLAG_WAITING_DEL;
	ret = DB_t_door_device_cardlist_update_by_device_id_and_cust_id(
		in_pack->lvol1,in_pack->lvol0,&door_card);
	if(ret)
	{
		return E_DB_DOOR_CARDLIST_U;
	}
	sprintf(out_pack->vsmess,"成功: 客户号[%d]门禁[%d]已删除"
				,in_pack->lvol0,in_pack->lvol1);
	out_pack->lvol0 = 1;
L_PUTROW_RET:
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
}
Exemplo n.º 12
0
int F841607(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	int i=0;
	int iCnt=0;
	int flag=0;
	T_t_cif_phototmp tPhotoTmp;
	T_t_cif_phototmp tPhotoTmpOut;
	T_t_cif_photo  tYktPhoto;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	memset(&tPhotoTmp,0,sizeof(T_t_cif_phototmp));
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_SCUST_LIMIT,F_VSMESS,0);

	tPhotoTmp.seqno=rPack->lvol4;
	if(1==tPhotoTmp.seqno)
	{
		flag=1;
		//取批次号
		getsysdatetime(tPhotoTmp.batch_no);
		ret=DynamicStmtExecute("delete from ykt_cur.t_cif_phototmp");
		if(ret)
		{
			if(DB_NOTFOUND != ret)
			{
				*pRetCode=E_DYNAMIC_STMT_EXECUTE;
				goto L_RETU;
			}
		}
	}
	else
	{
		des2src(tPhotoTmp.batch_no,rPack->scust_limit);
		if(strlen(tPhotoTmp.batch_no)!=14)
		{
			*pRetCode=E_INPUT_BATCH_NO;
			goto L_RETU;
		}
	}
	des2src(tPhotoTmp.stuemp_no,rPack->scust_auth);
	des2src(tPhotoTmp.stuemp_name,rPack->sname);
	des2src(tPhotoTmp.cut_type,rPack->sname2);
	des2src(tPhotoTmp.sex,rPack->smarket_code);
	des2src(tPhotoTmp.dept_code,rPack->scust_no);
	des2src(tPhotoTmp.s_code,rPack->scust_no2);
	des2src(tPhotoTmp.cur_grade,rPack->sorder0);
//	des2src(tCustomerTmp.status,rPack->scust_type);
	tPhotoTmp.is_inschool=rPack->lvol1;
	tPhotoTmp.status=rPack->lvol2;

	ret=DB_t_cif_phototmp_add(&tPhotoTmp);
	if(SQLCODE)
	{
		if(DB_REPEAT==SQLCODE)
		{
			if(1==tPhotoTmp.seqno)
			{
				//如果插入有冲突,则再重新生成新的批次号
				for(i=0;i<3;i++)
				{
					sleep(1);
					getsysdatetime(tPhotoTmp.batch_no);
					ret=DB_t_cif_phototmp_add(&tPhotoTmp);
					if(ret)
					{
						if(DB_REPEAT==SQLCODE)
							continue;
						else
						{
							*pRetCode=E_DB_PHOTOTMP_I;
							goto L_RETU;
						}
					}
					break;
				}
				if(i>=3)
				{
					writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tPhotoTmp.batch_no,tPhotoTmp.seqno);
					*pRetCode=E_DB_PHOTOTMP_E;
					goto L_RETU;
				}
			}
			else
			{
				writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tPhotoTmp.batch_no,tPhotoTmp.seqno);
				*pRetCode=E_DB_PHOTOTMP_E;
				goto L_RETU;
			}
		}
		else
		{
			writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tPhotoTmp.batch_no,tPhotoTmp.seqno);
			*pRetCode=E_DB_PHOTOTMP_I;
			goto L_RETU;
		}
	}
	if(rPack->scust_type[0]=='1')
	{
		//最后一条,开始把临时表数据导入到照片表
		writelog(LOG_DEBUG,"导入第%d记录,批次号:%s,姓名:%s",tPhotoTmp.seqno,tPhotoTmp.batch_no,tPhotoTmp.stuemp_name);
		//因为照片库是联邦过来的,需要先提交事务,才能更新联邦数据库
		ret=db_commit();
		if(ret)
		{
			ret=E_DB_COMMIT;
			writelog(LOG_ERR,"db_commit ret[%d]",ret);
			goto L_RETU;
		}
		iCnt=0;
		ret=DB_t_cif_phototmp_open_select_by_c0_and_batch_no(tPhotoTmp.batch_no);
		while(1)
		{
			memset(&tPhotoTmpOut,0,sizeof(tPhotoTmpOut));
			ret=DB_t_cif_phototmp_fetch_select_by_c0(&tPhotoTmpOut);
			if(ret)
			{
				if(DB_NOTFOUND==ret)
				{
					if(iCnt>0)
						break;
					else
					{
						*pRetCode=E_DB_PHOTOTMP_N;
						goto L_RETU;
					}
				}
				else
				{
					*pRetCode=E_DB_PHOTOTMP_R;
					goto L_RETU;
				}
			}
			memset(&tYktPhoto,0,sizeof(tYktPhoto));
			//导入照片表
			des2src(tYktPhoto.cur_grade,tPhotoTmpOut.cur_grade);
			des2src(tYktPhoto.cut_type,tPhotoTmpOut.cut_type);
			des2src(tYktPhoto.dept_code,tPhotoTmpOut.dept_code);
			tYktPhoto.is_inschool=tPhotoTmpOut.is_inschool;
			des2src(tYktPhoto.sex,tPhotoTmpOut.sex);
			des2src(tYktPhoto.stuemp_name,tPhotoTmpOut.stuemp_name);
			des2src(tYktPhoto.stuemp_no,tPhotoTmpOut.stuemp_no);
			des2src(tYktPhoto.s_code,tPhotoTmpOut.s_code);
			ret=DB_t_cif_photo_add(&tYktPhoto);
			if(ret)
			{
				DB_t_cif_phototmp_close_select_by_c0();
				sprintf(szMsg,"批次号%s,第%d条姓名为%s的记录有误,不能导入.",tPhotoTmpOut.batch_no,tPhotoTmpOut.seqno,tPhotoTmp.stuemp_name);
				goto L_RETU;
			}
			++iCnt;
		}
		sprintf(out_pack->vsmess,"批次号:%s,共成功导入%d条客户信息",tPhotoTmp.batch_no,iCnt);
		flag=2;
	}
	if(flag!=2)
	{
		sprintf(out_pack->vsmess,"导入第%d记录,批次号:%s,姓名:%s",tPhotoTmp.seqno,tPhotoTmp.batch_no,tPhotoTmp.stuemp_name);
	}
	des2src(out_pack->scust_limit,tPhotoTmp.batch_no);
	PutRow(handle,out_pack,pRetCode,szMsg);
	writelog(LOG_DEBUG,out_pack->vsmess);
	return 0;
L_RETU:
	return -1;
}
Exemplo n.º 13
0
int F849021(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
	T_t_pif_cut_relation relation;
	T_t_pif_cut_relation_tmp input_relation;
	T_t_cif_customer customer;
	int i;
	int count;
	int flag;
	ST_CPACK aPack;
	ST_PACK * out_pack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_SCUST_LIMIT,F_VSMESS,0);

	memset(&input_relation,0,sizeof input_relation);
	des2src(input_relation.batch_no,in_pack->scust_limit);
	input_relation.seqno = in_pack->lvol0;
	
	if(1 == input_relation.seqno)
	{
		ret = DynamicStmtExecute("DELETE FROM YKT_CUR.T_PIF_CUT_RELATION_TMP ");
		if(ret)
		{
			if(DB_NOTFOUND != ret)
			{
				*pRetCode = ret;
				goto L_RETU;
			}
		}
		getsysdatetime(input_relation.batch_no);
	}
	else if(strlen(input_relation.batch_no) != 14)
	{
		*pRetCode=E_INPUT_BATCH_NO;
		goto L_RETU;
	}

	input_relation.cut_id = in_pack->lvol1;
	if(0 == input_relation.cut_id)
	{
		if(strlen(in_pack->scust_auth) == 0)
		{
			*pRetCode = E_INPUT_STUEMP_NO;
			sprintf(szMsg,"第[%d]条记录客户号与学工号都为空",input_relation.seqno);
			writelog(LOG_DEBUG,szMsg);
			goto L_RETU;
		}
		memset(&customer,0,sizeof customer);
		//查询学工号
		//ret = GetCutInfoByStuempnoAndArea(in_pack->scust_auth,in_pack->lvol2,&customer);
		if(ret)
		{
			sprintf(szMsg,"学工号[%s]校区[%d]客户不存在"
				,in_pack->scust_auth,in_pack->lvol2);
			writelog(LOG_DEBUG,szMsg);
			*pRetCode = ret;
			goto L_RETU;
		}
		input_relation.cut_id = customer.cut_id;
	}
	sprintf(input_relation.comment,"操作员%s",in_pack->scust_no);
	des2src(input_relation.outside_no,in_pack->sbank_acc);
	input_relation.outside_type = CUT_RELATION_TYPE_BANK;

	ret = DB_t_pif_cut_relation_tmp_add(&input_relation);
	if(ret)
	{
		if(DB_REPEAT == ret)
		{
			if(1 == input_relation.seqno)
			{
				//批次号重复
				for(i=0;i<3;i++)
				{
					sleep(1);
					getsysdatetime(input_relation.batch_no);
					ret=DB_t_pif_cut_relation_tmp_add(&input_relation);
					if(ret)
					{
						if(DB_REPEAT==ret)
							continue;
						else
						{
							*pRetCode=E_DB_CUT_RLTN_TMP_I;
							goto L_RETU;
						}
					}
					break;
				}
				if(i >= 3)
				{
					*pRetCode = E_DB_CUT_RLTN_TMP_E;
					writelog(LOG_ERR,"batch_no[%s],seqno[%d]",input_relation.batch_no,input_relation.seqno);
					goto L_RETU;
				}
			}
			else
			{
				*pRetCode = E_DB_CUT_RLTN_TMP_E;
				writelog(LOG_ERR,"batch_no[%s],seqno[%d]",input_relation.batch_no,input_relation.seqno);
				goto L_RETU;
			}
		}
		else
		{
			*pRetCode = E_DB_CUT_RLTN_TMP_I;
			writelog(LOG_ERR,"batch_no[%s],seqno[%d]",input_relation.batch_no,input_relation.seqno);
			goto L_RETU;	
		}
	}
	flag = 1;
	if('1' == in_pack->scust_type[0] )
	{
		//最后一条记录已经导入
		ret = DB_t_pif_cut_relation_tmp_open_select_by_c1_and_batch_no(
		input_relation.batch_no);
		if(ret)
		{
			*pRetCode = E_DB_CUT_RLTN_TMP_R;
			goto L_RETU;
		}
		count = 0;
		while(1)
		{
			memset(&input_relation,0,sizeof input_relation);
			ret = DB_t_pif_cut_relation_tmp_fetch_select_by_c1(&input_relation);
			if(ret)
			{
				if(DB_NOTFOUND == ret)
					break;
				*pRetCode = E_DB_CUT_RLTN_TMP_R;
				goto L_RETU;
			}
			relation.cut_id = input_relation.cut_id;
			relation.outside_type = input_relation.outside_type;
			des2src(relation.outside_no,input_relation.outside_no);
			des2src(relation.comment,input_relation.comment);
			ret = DB_t_pif_cut_relation_add(&relation);
			if(ret)
			{
				DB_t_pif_cut_relation_tmp_close_select_by_c1();
				memset(&customer,0,sizeof customer);
				DB_t_cif_customer_read_by_cut_id(input_relation.cut_id,&customer);
				if(DB_REPEAT == ret)
				{
					sprintf(szMsg,"导入序号[%d],学工号[%s],校区[%d]已存在"
						,input_relation.seqno,customer.stuemp_no,customer.area);
					writelog(LOG_ERR,szMsg);
					*pRetCode = E_DB_CUT_RLTN_I;
					goto L_RETU;
				}
				else
				{
					sprintf(szMsg,"导入序号[%d],学工号[%s],校区[%d]有误,不能导入"
						,input_relation.seqno,customer.stuemp_no,customer.area);
					writelog(LOG_ERR,szMsg);
					*pRetCode = E_DB_CUT_RLTN_I;
					goto L_RETU;
				}
			}
			count++;
		}
		sprintf(out_pack->vsmess,"批次号:%s,共成功导入%d条客户信息",input_relation.batch_no,count);
		flag=2;
	}
	if(2 != flag)
	{
		sprintf(out_pack->vsmess,"导入第%d记录,批次号:%s",input_relation.seqno,input_relation.batch_no);
	}
	des2src(out_pack->scust_limit,input_relation.batch_no);
	PutRow(handle,out_pack,pRetCode,szMsg);
	writelog(LOG_DEBUG,out_pack->vsmess);
	return 0;
L_RETU:
	return -1;
}
Exemplo n.º 14
0
/**
 * \brief 处理网银转账入账业务
 * \param in_pack 请求报文包
 * \param out_pack 输出报文包
 * \param online_tx 联机交易,当为1时,如果个人账户已注销,则不能交易,
 *					当为0时,如果个人账户已注销,则借记 现金,贷记 营业成本
 */
int do_849009(ST_PACK *in_pack,char *szMsg,ST_PACK *out_pack,int online_tx)
{
	int cust_id,card_id;
	int subsidy_no;
	int ret,count;
	char temp[64];
	double max_subsidy_money = 0.0;
	double total_money,dSerial;
	T_t_tif_subsidy subsidy;
	T_t_tif_tradeserial tSerial;
	T_t_aif_account account;
	T_t_tif_meslist tMesList;
	InAcc IA;
	if(amtcmp(in_pack->damt0,0.0) <= 0)
	{
		writelog(LOG_DEBUG,"input money error!");
		return E_INPUT_AMT;
	}

	memset(temp,0,sizeof temp);
	ret = GetParameter(GLOBAL_MAX_PER_SUBSIDY,temp);
	if(ret)
	{
		return ret;
	}
	max_subsidy_money = D4U5(atof(temp),2);
	
	// 流水号
	ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerial);
	if(ret)
	{
		return ret;
	}
	// 查询卡信息
	ret = do_849008_query(in_pack,&cust_id,&card_id);
	if(ret)
	{
		writelog(LOG_DEBUG,"query customer information error!,ret[%d]",ret);
		return ret;
	}

	// 账户信息
	memset(&account,0,sizeof account);
	ret = DB_t_aif_account_read_by_card_id_and_purse_id(card_id,in_pack->lvol3,&account);
	if(ret)
	{
		// 账户表无信息
		if(DB_NOTFOUND == ret)
			return E_DB_ACCOUNT_N;
		else
			return E_DB_ACCOUNT_R;

	}
	// 生成流水记录
	memset(&tSerial,0,sizeof tSerial);
	writelog(LOG_DEBUG,"cust_id[%d],Serial_no[%d]]",cust_id,in_pack->lvol2);
	ret = do_849008_query_serial(cust_id,in_pack->lvol2,&tSerial);
	if(ret)
	{
		return ret;
	}
	// 认为已经入账成功,直接返回结果
	if(tSerial.serial_no > 0)
	{
		out_pack->lvol0 = tSerial.card_id;
		out_pack->lvol1 = tSerial.serial_no;
		out_pack->lvol2 = tSerial.customer_id;
		out_pack->damt0 = tSerial.trade_fee;
		return 0;
	}
	
	memset(&IA,0,sizeof IA);

	tSerial.serial_no = D2I(dSerial);
	tSerial.serial_type = TXCODE_NETFEE_TRANS; // 网银转账
	tSerial.serial_state = SERISTAT_DEBT;
	des2src(tSerial.oper_code,in_pack->scust_no2);
	des2src(tSerial.operate_date,in_pack->sdate0);
	des2src(tSerial.operate_time,in_pack->stime0);
	GetLogicDate(tSerial.enteract_date);
	getsystime(tSerial.enteract_time);
	getsysdate(tSerial.collect_date);
	des2src(tSerial.collect_time,tSerial.enteract_time);
	tSerial.customer_id = cust_id;
	tSerial.card_id = card_id;
	tSerial.in_balance = 0.0;
	tSerial.out_balance = 0.0;
	tSerial.trade_fee = in_pack->damt0;
	tSerial.other_seri_no = in_pack->lvol2; // 银行端流水号

	if(account.current_state >= ACCOUNTSTAT_LOGOUT)
	{
		// 个人账户已经注销
		if(online_tx)
			return E_ACTNO_LOGOUT;
		// 借记 银行存款 贷记 营业成本
		des2src(IA.sArrInActno[3],"1021");
		IA.dArrInAmt[1] = tSerial.trade_fee;
	}
	else
	{
		// 个人账户号
		des2src(IA.sArrInActno[0],account.account_id);
		IA.dArrInAmt[0] = tSerial.trade_fee;
	}
	IA.iFeeType=1;
	ret = process(&IA,&tSerial);
	if(ret)
	{
		writelog(LOG_ERR,"入账失败,cust_id[%d],card_id[%d],ret[%d]"
				 ,cust_id,card_id,ret);
		return ret;
	}

	ret = DB_t_tif_tradeserial_add(&tSerial);
	if(ret)
	{
		writelog(LOG_ERR,"记录流水失败");
		return E_DB_TRADESERIAL_I;
	}
	// 先入账 
	total_money = 0.0;
	count = 0;
	memset(&subsidy,0,sizeof subsidy);
	subsidy.cust_no = cust_id;
	getsysdatetime(subsidy.batch_no);
	des2src(subsidy.oper_code,tSerial.oper_code);
	strcpy(subsidy.summary,"网银转账");
	strcpy(subsidy.expire_date,"20500101");
	subsidy.bill_type = TYPE_CASH;
	subsidy.card_no = card_id;
	des2src(subsidy.tx_date,tSerial.operate_date);
	des2src(subsidy.tx_time,tSerial.operate_time);
	subsidy.status[0] = SUBSIDY_STAT_NORMAL;
	strcpy(subsidy.subsidytype,"1");
    subsidy.amount = D4U5(in_pack->damt0 - total_money,2);
	if(amtcmp(subsidy.amount,0.0) <= 0)
	{
			// 剩余金额为 0, 不可能出现小于 0
	//		break;
	
		ret=E_MOBILE_TRANS_ZERO;
		return ret;
			
	}
	else if(amtcmp(subsidy.amount,max_subsidy_money) > 0.0)
	{
			// 单笔金额不能大于最大值
		//subsidy.amount = max_subsidy_money;
		ret=E_MOBILE_TRANS_MAX;
		return ret;
	}

	total_money = D4U5(total_money+subsidy.amount,2);

	ret = calc_card_max_subsidy_no(cust_id,card_id,&subsidy_no);
	if(ret)
	{
		writelog(LOG_DEBUG,"cannot calculate max subsidy NO,cust[%d],card[%d],ret[%d]",
				 cust_id,card_id,ret);
		return ret;
	}
	subsidy.subsidy_no = subsidy_no;
	ret = DB_t_tif_subsidy_add(&subsidy);
	if(ret)
	{
		// 记录信息失败
		if(DB_REPEAT == ret)
			return E_DB_SUBSIDY_E;
		else
			return E_DB_SUBSIDY_I;
	}

	out_pack->lvol0 = card_id;
	out_pack->lvol1 = tSerial.serial_no;
	out_pack->lvol2 = tSerial.customer_id;
	out_pack->damt0 = tSerial.trade_fee;
	return 0;	
}
Exemplo n.º 15
0
//银行卡绑定关系
int BankCardRelation(tagBankCardRelation* BCR)
{
	int ret=0;
	MSG BankReq;
	MSG BankAns;
	
	memset(&BankReq,0x20,sizeof BankReq);
	memset(&BankAns,0,sizeof BankAns);
	memcpy(BankReq.head.MsgLength,"0256",4);
	switch(BCR->transtype)
	{
		case 'A':
			memcpy(BankReq.head.TradeType,BANK_ICBC_TRANSCODE_RELATION_ADD,strlen(BANK_ICBC_TRANSCODE_RELATION_ADD));
			break;
		case 'D':
			memcpy(BankReq.head.TradeType,BANK_ICBC_TRANSCODE_RELATION_DEL,strlen(BANK_ICBC_TRANSCODE_RELATION_DEL));
			break;
		default:
			memcpy(BankReq.head.TradeType,BANK_ICBC_TRANSCODE_RELATION_QRY,strlen(BANK_ICBC_TRANSCODE_RELATION_QRY));
			break;
	}
	memcpy(BankReq.head.Sender,BANK_ICBC_SENDER,strlen(BANK_ICBC_SENDER));
	memcpy(BankReq.head.Receiver,BANK_ICBC_RECEIVER,strlen(BANK_ICBC_RECEIVER));
//	memset(gsyh_req.head.PINKeySynFlag,0x20,sizeof gsyh_req.head.PINKeySynFlag);
//	memset(gsyh_req.head.MACKeySynFlag,0x20,sizeof gsyh_req.head.MACKeySynFlag);
//	memset(gsyh_req.head.MAC,0x20,sizeof gsyh_req.head.MAC);

//	memset(gsyh_req.body.ReturnCode,0x20,sizeof gsyh_req.body.ReturnCode);
//	memset(gsyh_req.body.Message,0x20,sizeof gsyh_req.body.Message);
	memcpy(BankReq.body.TradeTime,getsysdatetime(NULL),14);
//	memset(gsyh_req.body.SchoolTransSeq,0x20,sizeof gsyh_req.body.SchoolTransSeq);
//	memset(gsyh_req.body.BankTransSeq,0x20,sizeof gsyh_req.body.BankTransSeq);
	//防止拷贝越界
	BCR->bankcardno[20]=0;
	BCR->stuempno[20]=0;
	BCR->custname[20]=0;
	BCR->idno[18]=0;
	memcpy(BankReq.body.BankAccNO,BCR->bankcardno,strlen(BCR->bankcardno));
	memcpy(BankReq.body.CampusCard,BCR->stuempno,strlen(BCR->stuempno));	
	memcpy(BankReq.body.StudentName,BCR->custname,strlen(BCR->custname));
	memcpy(BankReq.body.StudentID,BCR->idno,strlen(BCR->idno));
//	memset(gsyh_req.body.Amount,0x20,sizeof gsyh_req.body.Amount);
//	memset(gsyh_req.body.Balance,0x20,sizeof gsyh_req.body.Balance);
//	memset(gsyh_req.body.BankCardPwd,0x20,sizeof gsyh_req.body.BankCardPwd);
	
	Trace_Bank_Package_GSYH(&BankReq,"send query bank package");
////////////////////////////////////////////////////////////////////////
//test
//	strcpy(BCR->bankcardno,"12345543211234554321");
//	return 0;//test
	ret=send_to_and_recv_from_bank(BANK_GSYH,(char*)&BankReq,sizeof(BankReq),(char*)&BankAns,sizeof(BankAns),&g_Bank);
	if(ret)
	{
		writelog(LOG_ERR,"send_to_and_recv_from_bank error,bank_id=[%d],errcode=[%d]",BANK_GSYH,ret);
		if(E_TRANS_BANK_NETERR==ret)
		{
			strcpy(BCR->retmsg,"银行网络故障");
		}
		else
		{
			strcpy(BCR->retmsg,"银行端没有响应");
		}
		return ret;
	}
	Trace_Bank_Package_GSYH(&BankAns,"receivce query bank package");
	
	if(0!=strncmp(BankAns.body.ReturnCode,"0000",4))
	{
		writelog(LOG_ERR,"Receive data return code error,error code= [%4.4s]msg[%24.24s]",BankAns.body.ReturnCode,BankAns.body.Message);
		char retcode[5]="";
		strncpy(retcode,BankAns.body.ReturnCode,sizeof(BankAns.body.ReturnCode));
		retcode[4]=0;
		BCR->retcode=atoi(retcode);
		strncpy(BCR->retmsg,BankAns.body.Message,sizeof(BankAns.body.Message));
		trim(BCR->retmsg);
		printf("银行返回信息:%s\n",BCR->retmsg);
		if(strlen(BCR->retmsg)==0)
			strcpy(BCR->retmsg,"银行无响应信息");
		return 0;
	}
	strncpy(BCR->bankcardno,BankAns.body.BankAccNO,sizeof(BankAns.body.BankAccNO));
	trim(BCR->bankcardno);
	printf("银行返回成功,银行卡号:%s\n",BCR->bankcardno);
	writelog(LOG_INFO,"query bankcardno succeed!bankcardno[%s]",BCR->bankcardno);
	return 0;
}
Exemplo n.º 16
0
int AccountProcess(InAcc *IA)
{
    int ret=-1;
    int iTxType=0;		//交易类型
    char num_exp[256]="";
    char sFee[256]="";
    char sFormula[256]="";
    char sIdxDbActNo[4]="";
    char sIdxCrActNo[4]="";
    char sVocNo[21] = "";
    char cur_date[9]="";
    char tradetime[15] = "";
    double dExpCalAmt=0;
    int iVocType = VOCTYPE_DEFALUT;
    char * pMessage = (char*)IA->pVoidPointer;

    int i = 0;
//	int idx=0;
    int idxTxCfg=-1;
    int idxSubCfg=-1;
    int config_cnt=1;
    int db_amt_flag=0;
    int cr_amt_flag=0;
    double  dInCardBala=0;
    double  dCardBala=0;
    double  dOutCardBala=0;

    T_t_pif_card	  tCard;
    T_t_aif_account tAccountDb;
    T_t_aif_account tAccountCr;
    T_t_tif_tradelog tTradelogDb;
    T_t_tif_tradelog tTradelogCr;

    getsysdate(cur_date);
    sprintf(tradetime,"%s%s",IA->sTxDate,IA->sTxTime);

    ret=InitTxFeeCfg(IA->iTradeNo);
    if(ret)
        return ret;
    ret=InitSplitCfg();
    if(ret)
        return ret;
    ret=InitSubjectCfg();
    if(ret)
        return ret;

    //根据交易码和客户收费类别读交易配置表
    if(IA->iFeeType<1)
    {
        return E_CUSTOMER_NO_FEE_TYPE;
    }
    idxTxCfg=GetIndexTxFeeCfgByTxCode(IA->iTradeNo,IA->iFeeType);
    if(idxTxCfg<0)
    {
        //如果没有取默认值
        idxTxCfg=GetIndexTxFeeCfgByTxCode(IA->iTradeNo,0);
        if(idxTxCfg<0)
        {
            writelog(LOG_ERR,"tx_code[%d]fee_type[%d]",IA->iTradeNo,IA->iFeeType);
            return E_CUSTOMER_NO_RIGHT;
        }
    }
    dInCardBala=IA->dInCardBala;
    dCardBala=IA->dInCardBala;
    dOutCardBala=IA->dOutCardBala;

    for(config_cnt=1; config_cnt<=MAXNUM_CFGSPLIT; config_cnt++)
    {
        //开始遍历收费集合
        ret=GetValueFromFmtBuf(CfgFee.ArrCfgFee[idxTxCfg].fee_list,",",config_cnt,sFee);
        if(ret)
        {
            if(1==config_cnt)
            {
                writelog(LOG_ERR, "TxCode[%d]FeeType[%d]fee_list[%s]",IA->iTradeNo,IA->iFeeType,CfgFee.ArrCfgFee[idxTxCfg].fee_list);
                return E_TXCODE_NOT_CONFIG;		//交易未配置
            }
            //writelog(LOG_ERR,"GetValueFromFmtBuf return error [%d]",ret);
            break;
        }
        iTxType=atoi(sFee);
        if(iTxType<0)
        {
            writelog(LOG_ERR,"tx_code[%d]fee_type[%d]",IA->iTradeNo,IA->iFeeType);
            return E_CUSTOMER_NO_RIGHT;
        }
//		writelog(LOG_DEBUG,"fee_list[%s]sFee[%s]",CfgFee.ArrCfgFee[idxTxCfg].fee_list,sFee);
        ret=GetValueFromFmtBuf(CfgFee.ArrCfgFee[idxTxCfg].formula_list,",",config_cnt,sFormula);
        if(ret)
        {
            writelog(LOG_ERR, "TxCode[%d]FeeType[%d]formula_list[%s]",IA->iTradeNo,IA->iFeeType,CfgFee.ArrCfgFee[idxTxCfg].formula_list);
            return E_EXP_NOT_CFG;		//交易未配置
        }
//		writelog(LOG_DEBUG,"formula_list[%s]Formula[%s]",CfgFee.ArrCfgFee[idxTxCfg].formula_list,sFormula);
        //得到收费类型
        /*
        switch(iTxType)
        {
        //			case TXTYPE_TOLL_DEPOSIT:		//收押金
        	case TXTYPE_RETURN_DEPOSIT:		//退押金
        	case TXTYPE_DEDUCT_DEPOSIT:	//扣押金
        		memset(&tCard,0,sizeof(tCard));
        		if(IA->iCardNo<1)
        		{
        			return E_INPUT_CARDNO_CANNOT_NULL;
        		}
        		ret=DB_t_pif_card_read_by_card_id(IA->iCardNo,&tCard);
        		if(ret)
        		{
        			if(DB_NOTFOUND==ret)
        				return E_CARDNO_NOT_EXIST;
        			else
        				return E_DB_CARD_R;
        		}
        		dExpCalAmt=tCard.deposit_fee;
        		break;

        	default:
        		ret=VarExp2NumExp(IA->dArrInAmt,IA->iArrInFeeSwitch,sFormula,num_exp);
        		if(ret)
        		{
        			writelog(LOG_ERR,"ret[%d]txcode[%d]txtype[%d]formula[%s]",ret,IA->iTradeNo, iTxType,sFormula);
        			return E_EXP_CFG;
        		}
        //		writelog(LOG_ERR,"formula[%s]num_exp[%s]",sFormula,num_exp);
        		ret=ExpCalAmt(num_exp, &dExpCalAmt);
        		if(ret)
        		{
        			writelog(LOG_ERR,"formula[%s]num_exp[%s]",sFormula,num_exp);
        			return E_EXP_CFG;
        		}
        		writelog(LOG_ERR,"formula[%s]num_exp[%s]amt[%lf]",sFormula,num_exp,dExpCalAmt);
        		break;
        }
        */
        //根据公式计算发生额
        ret=VarExp2NumExp(IA->dArrInAmt,IA->iArrInFeeSwitch,sFormula,num_exp);
        if(ret)
        {
            writelog(LOG_ERR,"ret[%d]txcode[%d]txtype[%d]formula[%s]",ret,IA->iTradeNo, iTxType,sFormula);
            return E_EXP_CFG;
        }
//		writelog(LOG_DEBUG,"formula[%s]num_exp[%s]",sFormula,num_exp);
        ret=ExpCalAmt(num_exp, &dExpCalAmt);
        if(ret)
        {
            writelog(LOG_ERR,"formula[%s]num_exp[%s]",sFormula,num_exp);
            return E_EXP_CFG;
        }
        dExpCalAmt=D4U5(dExpCalAmt,2);
//		writelog(LOG_DEBUG,"formula[%s]num_exp[%s]amt[%.4lf]",sFormula,num_exp,dExpCalAmt);
        //如果金额为0则continue
        if(amtcmp(dExpCalAmt,0)==0)
        {
            continue;
        }
        else if(amtcmp(dExpCalAmt,0)<0)
        {
            //如果不是冲正交易则不允许金额小于0
            if(ACC_TYPE_NORMAL == IA->iTxFlag)
            {
                writelog(LOG_DEBUG,"交易名称[%s]当前交易金额[%.4lf]",CfgSplit.ArrCfgsplit[iTxType].txname,dExpCalAmt);
                if(IA->pVoidPointer != NULL)
                {
                    sprintf((char*)IA->pVoidPointer,"%.2lf",dExpCalAmt);
                }
                return E_AMT_LACK;
            }
        }
        else
        {
            //冲正交易不允许金额大于0
            if(ACC_TYPE_RUSH == IA->iTxFlag)
            {
                writelog(LOG_DEBUG,"交易名称[%s]当前交易金额[%.4lf]",CfgSplit.ArrCfgsplit[iTxType].txname,dExpCalAmt);
                return E_INPUT_AMT;
            }
        }
        //类型为0的交易是用来检查输入金额是否有错误
        if(0==iTxType)
        {
            writelog(LOG_DEBUG,"交易名称[%s]当前交易金额[%.4lf]",CfgSplit.ArrCfgsplit[iTxType].txname,dExpCalAmt);
            return E_INPUT_AMT;
        }
        memset(sIdxDbActNo,0,sizeof(sIdxDbActNo));
        memset(sIdxCrActNo,0,sizeof(sIdxCrActNo));
        memset(&tTradelogDb, 0, sizeof(tTradelogDb));
        memset(&tTradelogCr, 0, sizeof(tTradelogCr));

        switch (CfgSplit.ArrCfgsplit[iTxType].dbflag)
        {
        case TYPE_INPUT:
            /*
            ret=GetValueFromFmtBuf(CfgFee.ArrCfgFee[idxTxCfg].idxdbactno_list,",",config_cnt,sIdxDbActNo);
            if(ret)
            {
            	writelog(LOG_ERR, "TxCode[%d]FeeType[%d]idxdbactno_list[%s]",IA->iTradeNo,IA->iFeeType,CfgFee.ArrCfgFee[idxTxCfg].idxdbactno_list);
            	return E_ACTNO_IDX_NOT_CFG;		//交易未配置
            }
            idx=atoi(sIdxDbActNo);
            if(idx<0)
            	return E_ACTNO_IDX_CFG;
            strcpy(tTradelogDb.act_id, IA->sArrInActno[idx]);	//借方账号
            */
            if(TXCODE_CARD_DBCR!=IA->iTradeNo)
            {
                if(strcmp(CfgSplit.ArrCfgsplit[iTxType].dbsubno,CfgSplit.ArrCfgsplit[iTxType].crsubno)!=0)
                {
                    if(strncmp(CfgSplit.ArrCfgsplit[iTxType].dbsubno,SUBJECT_INDIVIDUALSAVING,3)==0)
                        strcpy(tTradelogDb.act_id, IA->sArrInActno[0]);	//借方账号(person)
                    else if(strncmp(CfgSplit.ArrCfgsplit[iTxType].dbsubno,SUBJECT_SHOPSAVING,3)==0)
                        strcpy(tTradelogDb.act_id, IA->sArrInActno[1]);	//借方账号(shop)
                    else
                        strcpy(tTradelogDb.act_id, IA->sArrInActno[2]);	//借方账号
                }
                else
                {
                    strcpy(tTradelogDb.act_id, IA->sArrInActno[0]);	//借方账号(person)
                }
            }
            else
            {
                strcpy(tTradelogDb.act_id, IA->sArrInActno[0]);	//借方账号(person)
            }
            break;
        case TYPE_CONFIG:
            strcpy(tTradelogDb.act_id, CfgSplit.ArrCfgsplit[iTxType].dbactno);
            break;
        default:
            writelog(LOG_ERR, " TxType=[%d]",iTxType,CfgSplit.ArrCfgsplit[iTxType].dbflag);
            return E_DB_TRADEACT_R;
        }
        //修改借方帐户余额
        tTradelogDb.op_fee = dExpCalAmt;			//借方发生额
        memset(&tAccountDb, 0, sizeof(tAccountDb));
        ret = DB_t_aif_account_read_lock_by_cur_and_account_id(tTradelogDb.act_id, &tAccountDb);
        if (ret)
        {
            writelog(LOG_ERR, "read account err[%d]act_id[%s] ", ret, tTradelogDb.act_id);
            if (DB_NOTFOUND == ret)
                return E_ACTNO_NOT_EXIST;
            else
                return E_DB_ACCOUNT_R;
        }
        if(tAccountDb.current_state == ACCOUNTSTAT_LOGOUT)
        {
            DB_t_aif_account_free_lock_cur();
            writelog(LOG_ERR, "read account err[%d]act_id[%s]", E_ACTNO_LOGOUT, tAccountDb.account_id);
            return E_ACTNO_LOGOUT;
        }
        if(CfgSplit.ArrCfgsplit[iTxType].dbsubno[0]!=0)
        {
            if(strcmp(tAccountDb.subno,CfgSplit.ArrCfgsplit[iTxType].dbsubno)!=0)
            {
                DB_t_aif_account_free_lock_cur();
                writelog(LOG_ERR,"tradecode config_cnt[%d]TxType[%d]act_id[%s] tAccount.subno[%s]config dbsubno[%s]",config_cnt,iTxType,tAccountDb.account_id,tAccountDb.subno,CfgSplit.ArrCfgsplit[iTxType].dbsubno);
                return E_SPLIT_CFG;
            }
        }
        strcpy(tTradelogDb.subno,tAccountDb.subno);		//借方科目号
        //	writelog(LOG_DEBUG,"debit No[%d]account[%s]account.cur_bala[%lf]cur_freebala[%lf]cur_frozebala[%lf]amt[%lf]",i,account.account_id,account.cur_bala,account.cur_freebala,account.cur_frozebala,tTradelogDb.op_fee);
        idxSubCfg=GetIndexSubjectCfgBySubNo(tAccountDb.subno);
        if(idxSubCfg<0)
        {
            writelog(LOG_ERR, "GetIndexSubjectCfgBySubNo[%d] ",tAccountDb.subno);
            DB_t_aif_account_free_lock_cur();
            return E_DB_SUBJECT_N;
        }
        if (SUBTYPE_FUND== CfgSubject.ArrSubject[idxSubCfg].subtype|| SUBTYPE_COST== CfgSubject.ArrSubject[idxSubCfg].subtype )
        {
            tAccountDb.cur_bala = D4U5(tAccountDb.cur_bala+ tTradelogDb.op_fee,6);
            tAccountDb.cur_freebala = D4U5(tAccountDb.cur_freebala+ tTradelogDb.op_fee,6);
            db_amt_flag=1;
        }
        else
        {
            db_amt_flag=-1;
            if(strncmp(tAccountDb.subno,"201",3)==0)
            {
                //消费时从冻结金额中扣除搭伙费
                switch(CfgSplit.ArrCfgsplit[iTxType].fundtype)
                {
                case FUNDTYPE_BOARD://搭伙费
                    //如果搭伙费不足,则只扣账户上剩余的搭伙费
                    if(amtcmp(tAccountDb.cur_frozebala,0)<=0)
                    {
                        //如果搭伙费为负值或0,则不扣
                        DB_t_aif_account_free_lock_cur();
                        continue;
                    }
                    if(amtcmp(tAccountDb.cur_frozebala,tTradelogDb.op_fee)<0)
                    {
                        dExpCalAmt=tAccountDb.cur_frozebala;
                        tTradelogDb.op_fee = dExpCalAmt;		//借方发生额
                    }
                    tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala- tTradelogDb.op_fee,6);			//总余额
                    tAccountDb.cur_frozebala = D4U5(tAccountDb.cur_frozebala - tTradelogDb.op_fee,6);
                    break;
                default:
                    tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala- tTradelogDb.op_fee,6);			//总余额
                    tAccountDb.cur_freebala =D4U5(tAccountDb.cur_freebala-tTradelogDb.op_fee,6);	//可用余额
                    //更新卡余额
                    if(USE_CARD_TYPE_ONLINE==IA->iUseCardFlag)
                    {
                        //联机交易保留交易金额的交易时间
                        getsysdatetime(tAccountDb.reserve_1);
                        if(amtcmp(dOutCardBala,0)>=0)
                        {
                            tAccountDb.card_balance=dOutCardBala;					//卡余额
                            if(IA->iTxCnt>0)
                                tAccountDb.consume_count=IA->iTxCnt;			//消费次数增加
                        }
                        else if(amtcmp(dInCardBala,0)>=0)
                        {
                            //有入卡值,没有出卡值,计算出卡值,卡余额
                            dCardBala = dCardBala - D4U5(tTradelogDb.op_fee,2);	//卡余额
                            IA->dOutCardBala=D4U5(dCardBala,2);
                            tAccountDb.card_balance=IA->dOutCardBala;							//账户卡余额
                            if(IA->iTxCnt>0)
                                tAccountDb.consume_count=IA->iTxCnt;
                        }
                    }
                    else if(USE_CARD_TYPE_OFFLINE==IA->iUseCardFlag)
                    {
                        if((tAccountDb.consume_count<=IA->iTxCnt)
                                ||((strncmp(cur_date,IA->sTxDate,8) == 0)&& (strncmp(tradetime,tAccountDb.reserve_1,14)>0)))
                        {
                            strcpy(tAccountDb.reserve_1,tradetime);
                            if(amtcmp(dOutCardBala,0)>=0)
                            {
                                tAccountDb.card_balance=dOutCardBala;
                                if(IA->iTxCnt>0)
                                    tAccountDb.consume_count=IA->iTxCnt;			//消费次数增加
                            }
                            else if(amtcmp(dInCardBala,0)>=0)
                            {
                                //有入卡值,没有出卡值,计算出卡值,卡余额
                                dCardBala = dCardBala - D4U5(tTradelogDb.op_fee,2);	//卡余额
                                IA->dOutCardBala=D4U5(dCardBala,2);
                                tAccountDb.card_balance=IA->dOutCardBala;							//账户卡余额
                                if(IA->iTxCnt>0)
                                    tAccountDb.consume_count=IA->iTxCnt;
                            }
                        }
                        //当前交易不是最近一次交易,有入卡值,只计算出卡值
                        else if((amtcmp(dInCardBala,0)>=0)&&(amtcmp(dOutCardBala,0)<0))
                        {
                            //计算出卡值
                            dCardBala = dCardBala - D4U5(tTradelogDb.op_fee,2);		//卡余额
                            IA->dOutCardBala=D4U5(dCardBala,2);
                        }
                    }
                    break;
                }
            }
            else
            {
                /*
                //对押金单独处理
                switch(iTxType)
                {
                	case TXTYPE_RETURN_DEPOSIT:		//退押金
                	case TXTYPE_DEDUCT_DEPOSIT:	//扣押金
                		memset(&tCard,0,sizeof(tCard));
                		if(IA->iCardNo<1)
                		{
                			return E_INPUT_CARDNO_CANNOT_NULL;
                		}
                		ret=DB_t_pif_card_read_lock_by_cur_and_card_id(IA->iCardNo,&tCard);
                		if(ret)
                		{
                			if(DB_NOTFOUND==ret)
                				return E_CARDNO_NOT_EXIST;
                			else
                				return E_DB_CARD_R;
                		}
                		tCard.deposit_fee=0;
                		ret=DB_t_pif_card_update_lock_by_cur(&tCard);
                		if(ret)
                		{
                			if(DB_NOTFOUND==ret)
                				return E_CARDNO_NOT_EXIST;
                			else
                				return E_DB_CARD_U;
                		}
                		DB_t_pif_card_free_lock_by_cur();
                		break;
                }
                */
                tAccountDb.cur_bala =D4U5(tAccountDb.cur_bala - tTradelogDb.op_fee,6);
                tAccountDb.cur_freebala =D4U5(tAccountDb.cur_freebala- tTradelogDb.op_fee,6);
            }

        }
        //判断余额是否小于0,不允许透支,资产类帐户除外
        //应该是负债类账户
        if(strncmp(tAccountDb.subno,"2",1)==0)
        {
            if(amtcmp(tAccountDb.cur_bala,0)<0||amtcmp(tAccountDb.cur_freebala,0)<0)
            {
                writelog(LOG_ERR,"host serialno[%d]debit No[%d]account[%s]account.cur_bala[%lf]cur_freebala[%lf]cur_frozebala[%lf]amt[%lf]",IA->iSerialNo,i,tAccountDb.account_id,tAccountDb.cur_bala,tAccountDb.cur_freebala,tAccountDb.cur_frozebala,tTradelogDb.op_fee);
                DB_t_aif_account_free_lock_cur();
                return E_BALANCE_SHORTAGE;
            }
        }
        tTradelogDb.new_fee    = tAccountDb.cur_bala;						//借方帐户总余额
        tTradelogDb.cur_frozebala=tAccountDb.cur_frozebala;					//冻结金额
        ret = DB_t_aif_account_update_lock_by_cur(&tAccountDb);
        if (ret)
        {
            writelog(LOG_ERR, "update account err[%d] account[%s]", ret,tAccountDb.account_id);
            if (DB_NOTFOUND == ret)
                return E_ACTNO_NOT_EXIST;
            else
                return E_DB_ACCOUNT_U;
        }
        DB_t_aif_account_free_lock_cur();
        //######################################################
        //处理贷方账号1
        switch (CfgSplit.ArrCfgsplit[iTxType].crflag)
        {
        case TYPE_INPUT:
            /*
            ret=GetValueFromFmtBuf(CfgFee.ArrCfgFee[idxTxCfg].idxcractno_list,",",config_cnt,sIdxCrActNo);
            if(ret)
            {
            	writelog(LOG_ERR, "TxCode[%d]FeeType[%d]idxcractno_list[%s]",IA->iTradeNo,IA->iFeeType,CfgFee.ArrCfgFee[idxTxCfg].idxcractno_list);
            	return E_ACTNO_IDX_NOT_CFG;		//交易未配置
            }
            idx=atoi(sIdxCrActNo);
            if(idx<0)
            	return E_ACTNO_IDX_CFG;
            strcpy(tTradelogCr.act_id, IA->sArrInActno[idx]);	//贷方账号
            */
            if(TXCODE_CARD_DBCR!=IA->iTradeNo)
            {
                if(strcmp(CfgSplit.ArrCfgsplit[iTxType].dbsubno,CfgSplit.ArrCfgsplit[iTxType].crsubno)!=0)
                {
                    if(strncmp(CfgSplit.ArrCfgsplit[iTxType].crsubno,SUBJECT_INDIVIDUALSAVING,3)==0)
                        strcpy(tTradelogCr.act_id, IA->sArrInActno[0]);	//贷方账号(person)
                    else if(strncmp(CfgSplit.ArrCfgsplit[iTxType].crsubno,SUBJECT_SHOPSAVING,3)==0)
                        strcpy(tTradelogCr.act_id, IA->sArrInActno[1]);	//贷方账号(shop)
                    else
                        strcpy(tTradelogDb.act_id, IA->sArrInActno[3]);	//贷方账号
                }
                else
                {
                    strcpy(tTradelogCr.act_id, IA->sArrInActno[1]);	//贷方账号(person)
                }
            }
            else
            {
                strcpy(tTradelogCr.act_id, IA->sArrInActno[1]);	//贷方账号(person)
            }
            break;
        case TYPE_CONFIG:
            strcpy(tTradelogCr.act_id, CfgSplit.ArrCfgsplit[iTxType].cractno);
            break;
        default:
            writelog(LOG_ERR, " TxType=[%d]",iTxType,CfgSplit.ArrCfgsplit[iTxType].crflag);
            return E_DB_TRADEACT_R;
        }
        //修改贷方帐户余额
        tTradelogCr.op_fee =dExpCalAmt;			//贷方发生额

        memset(&tAccountCr, 0, sizeof(tAccountCr));
        ret = DB_t_aif_account_read_lock_by_cur_and_account_id(tTradelogCr.act_id, &tAccountCr);
        if (ret)
        {
            writelog(LOG_ERR, "read account err[%d]act_id[%s]", ret, tTradelogCr.act_id);
            if (DB_NOTFOUND == ret)
                return E_ACTNO_NOT_EXIST;
            else
                return E_DB_ACCOUNT_R;
        }
        if(tAccountCr.current_state == ACCOUNTSTAT_LOGOUT)
        {
            DB_t_aif_account_free_lock_cur();
            writelog(LOG_ERR, "read account err[%d]act_id[%s]", E_ACTNO_LOGOUT, tAccountCr.account_id);
            return E_ACTNO_LOGOUT;
        }
        if(CfgSplit.ArrCfgsplit[iTxType].crsubno[0]!=0)
        {
            if(strcmp(tAccountCr.subno,CfgSplit.ArrCfgsplit[iTxType].crsubno)!=0)
            {
                writelog(LOG_ERR,"tradecode config_cnt[%d]TxType[%d]act_id[%s] tAccount.subno[%s]config dbsubno[%s]",config_cnt,iTxType,tAccountCr.account_id,tAccountCr.subno,CfgSplit.ArrCfgsplit[iTxType].crsubno);
                DB_t_aif_account_free_lock_cur();
                return E_SPLIT_CFG;
            }
        }
        strcpy(tTradelogCr.subno, tAccountCr.subno);			//贷方科目号
//		writelog(LOG_DEBUG,"credit No[%d]tAccount[%s]account.cur_bala[%lf]cur_freebala[%lf]cur_frozebala[%lf]amt[%lf]",i,account.account_id,account.cur_bala,account.cur_freebala,account.cur_frozebala,ArrTradelog[i+1].op_fee);

        idxSubCfg=GetIndexSubjectCfgBySubNo(tAccountCr.subno);
        if(idxSubCfg<0)
        {
            writelog(LOG_ERR, "GetIndexSubjectCfgBySubNo[%d] ", tAccountCr.subno);
            DB_t_aif_account_free_lock_cur();
            return E_DB_SUBJECT_N;
        }
        if (SUBTYPE_FUND== CfgSubject.ArrSubject[idxSubCfg].subtype|| SUBTYPE_COST== CfgSubject.ArrSubject[idxSubCfg].subtype )
        {
            tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala- tTradelogCr.op_fee,6);							//当前总余额
            tAccountCr.cur_freebala =D4U5(tAccountCr.cur_freebala-tTradelogCr.op_fee,6);							//当前可用余额
            cr_amt_flag=-1;
        }
        else
        {
            cr_amt_flag=1;
            //如果帐户类型为个人,则计算搭伙费,主要是充值使用
            if(strncmp(tAccountCr.subno,"201",3)==0)
            {
                tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala+ tTradelogCr.op_fee,6);				//总余额
                switch(CfgSplit.ArrCfgsplit[iTxType].fundtype)
                {
                case FUNDTYPE_BOARD:						//搭伙费
                    tAccountCr.cur_frozebala =D4U5(tAccountCr.cur_frozebala+ tTradelogCr.op_fee,6);
                    break;
                default:
                    tAccountCr.cur_freebala =D4U5(tAccountCr.cur_freebala+ tTradelogCr.op_fee,6);	//可用余额
                    //更新卡余额
                    if(USE_CARD_TYPE_ONLINE==IA->iUseCardFlag)
                    {
                        getsysdatetime(tAccountCr.reserve_1);
                        if(IA->iTxCnt>0)
                            tAccountCr.consume_count=IA->iTxCnt;			//消费次数增加
                        else
                        {
                            DB_t_aif_account_free_lock_cur();
                            return E_INPUT_CARD_TXCNT;
                        }
                        if(amtcmp(dOutCardBala,0)>=0)
                        {
                            tAccountCr.card_balance=dOutCardBala;					//卡余额
                        }
                        else if(amtcmp(dInCardBala,0)>=0)
                        {
                            //有入卡值,没有出卡值,计算出卡值,卡余额
                            dCardBala = dCardBala + D4U5(tTradelogDb.op_fee,2);	//卡余额
                            IA->dOutCardBala=D4U5(dCardBala,2);
                            tAccountCr.card_balance=IA->dOutCardBala;							//账户卡余额
                        }
                    }
                    else if(USE_CARD_TYPE_OFFLINE==IA->iUseCardFlag)
                    {
                        if((tAccountCr.consume_count<=IA->iTxCnt)
                                ||((strncmp(cur_date,IA->sTxDate,8) == 0)&&(strncmp(tradetime,tAccountDb.reserve_1,14)>0)))
                        {
                            strcpy(tAccountCr.reserve_1,tradetime);
                            if(IA->iTxCnt>0)
                                tAccountCr.consume_count=IA->iTxCnt;			//消费次数增加
                            if(amtcmp(dOutCardBala,0)>=0)
                            {
                                tAccountCr.card_balance=dOutCardBala;
                            }
                            else if(amtcmp(dInCardBala,0)>=0)
                            {
                                //有入卡值,没有出卡值,计算出卡值,卡余额
                                dCardBala = dCardBala + D4U5(tTradelogDb.op_fee,2);	//卡余额
                                IA->dOutCardBala=D4U5(dCardBala,2);
                                tAccountCr.card_balance=IA->dOutCardBala;							//账户卡余额
                            }
                        }
                        //当前交易不是最近一次交易,有入卡值,只计算出卡值
                        else if((amtcmp(dInCardBala,0)>=0)&&(amtcmp(dOutCardBala,0)<0))
                        {
                            //计算出卡值
                            dCardBala = dCardBala + D4U5(tTradelogDb.op_fee,2);		//卡余额
                            IA->dOutCardBala=D4U5(dCardBala,2);
                        }
                    }
                    break;
                }
            }
            else
            {
                //对押金单独处理
                switch(iTxType)
                {
                case TXTYPE_TOLL_DEPOSIT:		//收押金
                case TXTYPE_TOLL_DEPOSIT_BILL:
                case TXTYPE_TOLL_DEPOSIT_FUNDBOOK:
                    memset(&tCard,0,sizeof(tCard));
                    if(IA->iCardNo<1)
                    {
                        DB_t_aif_account_free_lock_cur();
                        return E_INPUT_CARDNO_CANNOT_NULL;
                    }
                    ret=DB_t_pif_card_read_lock_by_cur_and_card_id(IA->iCardNo,&tCard);
                    if(ret)
                    {
                        DB_t_aif_account_free_lock_cur();
                        if(DB_NOTFOUND==ret)
                            return E_CARDNO_NOT_EXIST;
                        else
                            return E_DB_CARD_R;
                    }
                    tCard.deposit_fee=tTradelogCr.op_fee;
                    ret=DB_t_pif_card_update_lock_by_cur(&tCard);
                    if(ret)
                    {
                        DB_t_aif_account_free_lock_cur();
                        if(DB_NOTFOUND==ret)
                            return E_CARDNO_NOT_EXIST;
                        else
                            return E_DB_CARD_U;
                    }
                    DB_t_pif_card_free_lock_by_cur();
                default:
                    break;
                }
                tAccountCr.cur_bala =D4U5(tAccountCr.cur_bala+tTradelogCr.op_fee,6);						//当前总余额
                tAccountCr.cur_freebala=D4U5(tAccountCr.cur_freebala+tTradelogCr.op_fee,6) ;					//当前可用余额
            }
        }
        //判断余额是否小于0,不允许透支,资产类帐户除外
        if(strncmp(tAccountCr.subno,"2",1)==0)
        {
            if(amtcmp(tAccountCr.cur_bala,0)<0||amtcmp(tAccountCr.cur_freebala,0)<0)
            {
                writelog(LOG_ERR,"host serialno[%d]credit No[%d+1]account[%s]account.cur_bala[%lf]cur_freebala[%lf]cur_frozebala[%lf]amt[%lf]",IA->iSerialNo,i,tAccountCr.account_id,tAccountCr.cur_bala,tAccountCr.cur_freebala,tAccountCr.cur_frozebala,tTradelogDb.op_fee);
                DB_t_aif_account_free_lock_cur();
                return E_BALANCE_SHORTAGE;
            }
        }
        tTradelogCr.new_fee = tAccountCr.cur_bala;			//贷方帐户余额
        tTradelogCr.cur_frozebala=tAccountCr.cur_frozebala;		//冻结金额
        ret = DB_t_aif_account_update_lock_by_cur(&tAccountCr);
        if (ret)
        {
            writelog(LOG_ERR, "update account err[%d] account[%s]", ret,tAccountCr.account_id);
            if (DB_NOTFOUND == ret)
                return E_ACTNO_NOT_EXIST;
            else
                return E_DB_ACCOUNT_U;
        }
        DB_t_aif_account_free_lock_cur();
        //增加借方分录流水
        tTradelogDb.maindevice_id = IA->iMainDevId;		//工作站标识
        tTradelogDb.device_id= IA->iDevId;				//终端设备ID
        tTradelogDb.serino = IA->iSerialNo;				//流水号
        tTradelogDb.seri_type= IA->iTradeNo;				//交易码
        tTradelogDb.fee_type=iTxType;						//分录序号
        tTradelogDb.warrant_type = iVocType;				//凭证类型
        strcpy(tTradelogDb.warrant_no, sVocNo);				//凭证号
        strcpy(tTradelogDb.comments, CfgSplit.ArrCfgsplit[iTxType].txname);	//摘要
        strcpy(tTradelogDb.operate_date, IA->sTxDate);		//交易日期
        strcpy(tTradelogDb.operate_time, IA->sTxTime);		//交易时间
        strcpy(tTradelogDb.collect_date,IA->sTxCollectDate);	//采集日期
        strcpy(tTradelogDb.collect_time,IA->sTxCollectTime);	//采集时间
        strcpy(tTradelogDb.enteract_date,IA->sTxAccDate);	//记账日期
        strcpy(tTradelogDb.enteract_time,IA->sTxAccTime);	//记账时间
        strcpy(tTradelogDb.record_oper, IA->sMdeOper);	//录入操作员
        strcpy(tTradelogDb.write_oper, IA->sChkOper);		//复核记账员
        tTradelogDb.outorin = DBCR_DEBIT;					//借方标志
        strcpy(tTradelogDb.other_actid, tTradelogCr.act_id);		//对方账号
        strcpy(tTradelogDb.other_subno, tTradelogCr.subno);	//对方科目
        ++IA->iSubIndex;
        tTradelogDb.annex = IA->iSubIndex;
        ret = DB_t_tif_tradelog_add(&tTradelogDb);
        if (ret)
        {
            writelog(LOG_ERR, "add ArrTradelog err[%d] ", ret);
            return E_DB_TRADELOG_I;
        }
        //增加贷方分录流水
        tTradelogCr.maindevice_id = IA->iMainDevId;		//工作站标识
        tTradelogCr.device_id= IA->iDevId;				//终端设备ID
        tTradelogCr.serino = IA->iSerialNo;				//流水号
        tTradelogCr.seri_type = IA->iTradeNo;				//交易码
        tTradelogCr.fee_type=iTxType;						//分录序号
        tTradelogCr.warrant_type = iVocType;					//凭证类型
        strcpy(tTradelogCr.warrant_no, sVocNo);				//凭证号
        strcpy(tTradelogCr.comments,  CfgSplit.ArrCfgsplit[iTxType].txname);//摘要
        strcpy(tTradelogCr.operate_date, IA->sTxDate);		//交易日期
        strcpy(tTradelogCr.operate_time, IA->sTxTime);		//交易时间
        strcpy(tTradelogCr.collect_date,IA->sTxCollectDate);	//采集日期
        strcpy(tTradelogCr.collect_time,IA->sTxCollectTime);	//采集时间
        strcpy(tTradelogCr.enteract_date,tTradelogDb.enteract_date);//记账日期
        strcpy(tTradelogCr.enteract_time,tTradelogDb.enteract_time);//记账时间
        strcpy(tTradelogCr.record_oper, IA->sMdeOper);		//录入操作员
        strcpy(tTradelogCr.write_oper, IA->sChkOper);		//复核操作员
        tTradelogCr.outorin = DBCR_CREDIT;					//贷方标志
        strcpy(tTradelogCr.other_actid, tTradelogDb.act_id);		//对方账号
        strcpy(tTradelogCr.other_subno, tTradelogDb.subno);	//对方科目
        tTradelogCr.annex = IA->iSubIndex;

        ret = DB_t_tif_tradelog_add(&tTradelogCr);
        if (ret)
        {
            writelog(LOG_ERR, "add ArrTradelog err[%d] ", ret);
            return E_DB_TRADELOG_I;
        }
        IA->dArrOutAmt[config_cnt]=dExpCalAmt;
        IA->iArrOutTxType[config_cnt]=iTxType;
        strcpy(IA->sArrOutTxName[config_cnt],CfgSplit.ArrCfgsplit[iTxType].txname);
        IA->iOutTxTypeCnt=config_cnt;
        //##############################################################
        if(IA->pVoidPointer!=NULL)
        {
            if(db_amt_flag>0)
                sprintf(pMessage+strlen(pMessage),"%s:余额增加%.2lf元", tAccountDb.cut_name,dExpCalAmt);
            else
                sprintf(pMessage+strlen(pMessage),"%s:余额减少%.2lf元", tAccountDb.cut_name,dExpCalAmt);
            if(cr_amt_flag>0)
                sprintf(pMessage+strlen(pMessage)," %s:余额增加%.2lf元",tAccountCr.cut_name,dExpCalAmt);
            else
                sprintf(pMessage+strlen(pMessage)," %s:余额减少%.2lf元", tAccountCr.cut_name,dExpCalAmt);
        }
    }
    //如果有入卡值但没有出卡值,则出卡值就是入卡值
    if(amtcmp(IA->dOutCardBala,0)<0)
    {
        if(amtcmp(IA->dInCardBala,0)>=0)
            IA->dOutCardBala=IA->dInCardBala;
    }
//	writelog(LOG_DEBUG,"serino[%d]IA->dInCardBala[%lf]IA->dOutCardBala[%lf]IA->iTxCnt[%d]",IA->iSerialNo,IA->dInCardBala,IA->dOutCardBala,IA->iTxCnt);
    return 0;
}
Exemplo n.º 17
0
static int do_check_buffer(const char *status_buffer,const char *op_time)
{
	int count,i;
	int buf_len;
	int ret;
	char dev_phyno[9]= "";
	int dev_state = 0;
	T_t_pif_device tDevice;
	T_t_mif_devmonitor dev_monitor;
	char temp[3] = "";
	static const int sect_len = 10;
	//writelog(LOG_DEBUG,"status buffer [%s]",status_buffer);
	buf_len = strlen(status_buffer);
	if(buf_len <= 0)
	{
		return 0;
	}
	for(i = 0;i < buf_len;i+=sect_len)
	{
		strncpy(dev_phyno,status_buffer+i,8);
		dev_phyno[8] = '\0';
		strncpy(temp,status_buffer+i+8,2);
		dev_state = strtoul(temp,NULL,16);
		memset(&tDevice,0,sizeof tDevice);
		ret = get_devinfo_by_phyid(dev_phyno,&tDevice);
		if(ret)
		{
			if(E_DEVICE_NOT_EXIST== ret)
			{
				writelog(LOG_ERR,"前置机心跳,设备不存在[%s]",dev_phyno);
				continue;
			}
			continue;
		}
		memset(&dev_monitor,0,sizeof dev_monitor);
		ret = DB_t_mif_devmonitor_read_by_device_id(tDevice.device_id,&dev_monitor);
		des2src(dev_monitor.op_time,op_time);
		getsysdatetime(dev_monitor.collect_time);
		des2src(dev_monitor.devtime,op_time);
		dev_monitor.device_id = tDevice.device_id;
		dev_monitor.beatstate = dev_state;
		if(ret)
		{
			if(DB_NOTFOUND == ret)
			{
				dev_monitor.is_ws[0] = '1';
				ret = DB_t_mif_devmonitor_add(&dev_monitor);
				if(ret)
				{
					writelog(LOG_ERR,"增加设备监控记录失败!dev[%d] phyno[%s]"
					,dev_monitor.device_id,dev_phyno);
					return -1;
				}
				continue;
			}
			return -1;
		}
		else
		{
			ret = DB_t_mif_devmonitor_update_by_device_id(tDevice.device_id,&dev_monitor);
			if(ret)
			{
				writelog(LOG_ERR,"更新设备监控记录失败!");
				if(DB_NOTFOUND == ret)
					continue;
				return -1;
			}
		}
	}
	if(buf_len < 250)
	{
		return 0;
	}
	return 1;
}
Exemplo n.º 18
0
int F841606(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	int i=0;
	int iCnt=0;
	int flag=0;
	T_t_cif_customer_tmp	tCustomerTmp;
	T_t_cif_customer_tmp	tCustomerTmpOut;
	ST_CPACK aPack;
	ST_PACK InPack;
	ST_PACK *out_pack = &(aPack.pack);

	memset(&tCustomerTmp,0,sizeof(tCustomerTmp));
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_SCUST_LIMIT,F_VSMESS,0);
#ifdef DEBUG
	writelog(LOG_DEBUG,"stuemp_no      :scust_auth     [%s]",rPack->scust_auth);
	writelog(LOG_DEBUG,"cut_name       :semail         [%s]",rPack->semail);
	writelog(LOG_DEBUG,"cut_type       :lvol0          [%d]",rPack->lvol0);
	writelog(LOG_DEBUG,"fee_type       :lvol2          [%d]",rPack->lvol2);
	writelog(LOG_DEBUG,"sex            :smarket_code   [%s]",rPack->smarket_code);
	writelog(LOG_DEBUG,"man_id         :scust_auth2    [%s]",rPack->scust_auth2);
	writelog(LOG_DEBUG,"phone          :sphome         [%s]",rPack->sphome);
	writelog(LOG_DEBUG,"area           :lvol1          [%d]",rPack->lvol1);
	writelog(LOG_DEBUG,"dept_no        :sname2         [%s]",rPack->sname2);
	writelog(LOG_DEBUG,"s_code         :scust_no2      [%s]",rPack->scust_no2);
	writelog(LOG_DEBUG,"in_school_date :sdate0         [%s]",rPack->sdate0);
	writelog(LOG_DEBUG,"out_school_date:sdate1         [%s]",rPack->sdate1);
	writelog(LOG_DEBUG,"card_type      :lvol3          [%d]",rPack->lvol3);
	writelog(LOG_DEBUG,"oper_code      :sorder0        [%s]",rPack->sorder0);
	writelog(LOG_DEBUG,"status      :scust_type        [%s]",rPack->scust_type);
#endif

	tCustomerTmp.seqno=rPack->lvol4;
	if(1==tCustomerTmp.seqno)
	{
		flag=1;
		//取批次号
		getsysdatetime(tCustomerTmp.batch_no);
		ret=DynamicStmtExecute("delete from ykt_cur.t_cif_customer_tmp ");
		if(ret)
		{
			if(ret != DB_NOTFOUND)
			{
				writelog(LOG_DEBUG,"导入人员信息失败[%d]",ret);
				*pRetCode=E_DYNAMIC_STMT_EXECUTE;
				goto L_RETU;
			}
		}
	}
	else
	{
		des2src(tCustomerTmp.batch_no,rPack->scust_limit);
		if(strlen(tCustomerTmp.batch_no)!=14)
		{
			*pRetCode=E_INPUT_BATCH_NO;
			goto L_RETU;
		}
	}
	des2src(tCustomerTmp.stuemp_no,rPack->scust_auth);
	des2src(tCustomerTmp.cut_name,rPack->semail);
	tCustomerTmp.cut_type=rPack->lvol0;
	tCustomerTmp.fee_type=rPack->lvol2;
	des2src(tCustomerTmp.sex,rPack->smarket_code);
	des2src(tCustomerTmp.man_id,rPack->scust_auth2);
	des2src(tCustomerTmp.phone,rPack->sphone);
	tCustomerTmp.area=rPack->lvol1;
	des2src(tCustomerTmp.dept_no,rPack->sname2);
	des2src(tCustomerTmp.s_code,rPack->scust_no2);
	des2src(tCustomerTmp.in_school_date,rPack->sdate0);
	des2src(tCustomerTmp.out_school_date,rPack->sdate1);
	tCustomerTmp.card_type=rPack->lvol3;
	des2src(tCustomerTmp.oper_code,rPack->sorder0);
	des2src(tCustomerTmp.status,rPack->scust_type);
	des2src(tCustomerTmp.class_no,rPack->sorder0);

	ret=DB_t_cif_customer_tmp_add(&tCustomerTmp);
	if(SQLCODE)
	{
		if(DB_REPEAT==SQLCODE)
		{
			if(1==tCustomerTmp.seqno)
			{
				//如果插入有冲突,则再重新生成新的批次号
				for(i=0;i<3;i++)
				{
					sleep(1);
					getsysdatetime(tCustomerTmp.batch_no);
					ret=DB_t_cif_customer_tmp_add(&tCustomerTmp);
					if(ret)
					{
						if(DB_REPEAT==SQLCODE)
							continue;
						else
						{
							*pRetCode=E_DB_CUSTOMER_TMP_I;
							goto L_RETU;
						}
					}
					break;
				}
				if(i>=3)
				{
					writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tCustomerTmp.batch_no,tCustomerTmp.seqno);
					*pRetCode=E_DB_CUSTOMER_TMP_E;
					goto L_RETU;
				}
			}
			else
			{
				writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tCustomerTmp.batch_no,tCustomerTmp.seqno);
				*pRetCode=E_DB_CUSTOMER_TMP_E;
				goto L_RETU;
			}
		}
		else
		{
			writelog(LOG_ERR,"batch_no[%s]seqno[%d]",tCustomerTmp.batch_no,tCustomerTmp.seqno);
			*pRetCode=E_DB_CUSTOMER_TMP_I;
			goto L_RETU;
		}
	}
	if(tCustomerTmp.status[0]=='1')
	{
		//最后一条,开始把临时表数据导入到客户表
		writelog(LOG_DEBUG,"导入第%d记录,批次号:%s,客户姓名:%s",tCustomerTmp.seqno,tCustomerTmp.batch_no,tCustomerTmp.cut_name);
		iCnt=0;
		ret=DB_t_cif_customer_tmp_open_select_by_c0_and_batch_no(tCustomerTmp.batch_no);
		while(1)
		{
			memset(&tCustomerTmpOut,0,sizeof(tCustomerTmpOut));
			memset(&InPack,0,sizeof(InPack));
			ret=DB_t_cif_customer_tmp_fetch_select_by_c0(&tCustomerTmpOut);
			if(ret)
			{
				if(DB_NOTFOUND==ret)
					break;
				else
				{
					*pRetCode=E_DB_CUSTOMER_TMP_R;
					goto L_RETU;
				}
			}
			InPack.lvol3=tCustomerTmpOut.cut_type;
			InPack.lvol5=tCustomerTmpOut.fee_type;
			des2src(InPack.sname,tCustomerTmpOut.cut_name);
			InPack.lvol0=tCustomerTmpOut.area;
			des2src(InPack.scust_auth2, tCustomerTmpOut.stuemp_no);
			des2src(InPack.scust_no,tCustomerTmpOut.dept_no);
			des2src(InPack.scust_auth,tCustomerTmpOut.man_id);
			des2src(InPack.smarket_code,tCustomerTmpOut.sex);
			des2src(InPack.sphone,tCustomerTmpOut.phone);
			des2src(InPack.sphone3,tCustomerTmpOut.out_school_date);
			des2src(InPack.scust_no2,tCustomerTmpOut.s_code);
			des2src(InPack.scust_limit,tCustomerTmpOut.batch_no);
			des2src(InPack.sorder0,tCustomerTmpOut.class_no);
			ret=F841601(handle,iRequest,&InPack,pRetCode,szMsg);
			if(ret)
			{
				writelog(LOG_ERR,"F841601 EXEC ERR");
				DB_t_cif_customer_tmp_close_select_by_c0();
				sprintf(szMsg,"批次号%s,第%d条姓名为%s的记录有误,不能导入.",tCustomerTmpOut.batch_no,tCustomerTmpOut.seqno,tCustomerTmpOut.cut_name);
				goto L_RETU;
			}
			++iCnt;
		}
		sprintf(out_pack->vsmess,"批次号:%s,共成功导入%d条客户信息",tCustomerTmp.batch_no,iCnt);
		flag=2;
	}
	if(flag!=2)
	{
		sprintf(out_pack->vsmess,"导入第%d记录,批次号:%s,客户姓名:%s",tCustomerTmp.seqno,tCustomerTmp.batch_no,tCustomerTmp.cut_name);
	}
	des2src(out_pack->scust_limit,tCustomerTmp.batch_no);
	PutRow(handle,out_pack,pRetCode,szMsg);
	writelog(LOG_DEBUG,out_pack->vsmess);
	return 0;
L_RETU:
	return -1;
}
Exemplo n.º 19
0
static int DoQueryBala(int tradecode,ST_PACK *rPack,ST_PACK *out_pack,char *szMsg)
{
	int ret = 0;
	int request_type = 2401;
	int drtp_branch  = 0;
	int base_funcno = 0;
	int bcc_timeout = 0;
	
	int  termid=rPack->lcert_code;
	int cardno=rPack->lvol0;
	int custid = rPack->lvol1;

	char sdatetime[15]="";
	char custidstr[50]="";	
	T_t_card	tCard;
	T_t_bankcard bankcard;
	T_t_cfgbank cfgbank;
	T_t_customer tCust;
	
	memset(&cfgbank,0,sizeof cfgbank);
	memset(&bankcard,0,sizeof bankcard);
	memset(&tCard,0,sizeof(tCard));
	memset(&tCust,0,sizeof tCust);

	char bankcode[3] = "";
	ST_PACK ArrayPack;			// 设置返回包
	ST_CPACK aPack;				// 设置应答包
	ST_CPACK sPack;			 	// 设置发送包

	ResetNormalCPack(&aPack, 0, 1);
	memset(&ArrayPack, 0, sizeof(ArrayPack));
	
	ResetNormalCPack(&sPack, 0, 1);
	sPack.head.RequestType = request_type;

	SetHeadCol(&sPack,F_STX_PWD, F_LCERT_CODE,F_SCUST_AUTH,F_LVOL0,F_LVOL1,F_LVOL2,F_LVOL6,F_SDATE0,F_STIME0,F_SPHONE2,
		F_SHOLDER_AC_NO,F_SPHONE,F_SCUST_LIMIT,F_SCUST_LIMIT2,F_SCUST_AUTH2,F_SEMP_PWD,0);      

	if(custid<1)
	{
		if(cardno>0)
		{
			ret=DB_t_card_read_by_cardno(cardno,&tCard);
			if(ret)
			{
				if(DB_NOTFOUND==ret)
					return E_NOTEXIST_CARDNO;
				else
					return E_DB_CARD_R;
			}
			if(tCard.status[0]!=STATUS_NORMAL)
			{
				return ERRINFO(E_CARD_LOGOUT,cardno);
			}	
			if('1'==tCard.frozeflag[0])
			{
				return ERRINFO(E_CARD_FREEZE,cardno);
			}
			if('1'==tCard.lossflag[0])
			{
				return ERRINFO(E_CARD_LOST,cardno);
			}	
			if('1'==tCard.badflag[0])
			{
				return ERRINFO(E_CARD_BADRECORD,cardno);
			}	
			if('1'==tCard.lockflag[0])
			{
				return ERRINFO(E_CARDNO_LOCKED,cardno);
			}	
			custid=tCard.custid;
		}
		else
		{
			return E_NOTEXIST_CARDNO;			
		}
	}

	if(custid>0)
	{
		ret = DB_t_customer_read_by_custid(custid, &tCust);
		if(ret)
		{
			return E_DB_CUSTOMER_R;
		}
		ret = DB_t_bankcard_read_by_custid(custid, &bankcard);
		if(ret)
		{
			return E_DB_BANKCARD_R;
		}
		des2src(bankcode,bankcard.bankcode);
	}	
	
	ret = DB_t_cfgbank_read_by_bankcode(bankcode,&cfgbank);
	if(ret)
	{
		return E_DB_CFGBANK_R;
	}	
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	if(strncmp(pAccTrans->trans.acctime,cfgbank.bankstarttime,6) < 0
		|| strncmp(pAccTrans->trans.acctime,cfgbank.bankendtime,6) > 0)
	{
		return E_OUT_BANKTIME;
	}
	T_t_area area;
	memset(&area,0,sizeof area);
	ret=DB_t_area_read_by_areacode(tCust.areacode,&area);
	if (ret)
	{
	   writelog(LOG_ERR,"read area err custid[%d] ",tCust.custid);
           // return E_DB_AREA_R;
	}
	drtp_branch = cfgbank.bccdrtpno;								// drtp 编号
	base_funcno = cfgbank.bccfuncno;								// 前置主功能号
	bcc_timeout = cfgbank.bcctimeout;								// 前置超时时间

	sPack.pack.lcert_code = tradecode;							// 交易码
	des2src(sPack.pack.scust_auth,cfgbank.bankip);					// 银行ip
	sPack.pack.lvol0 = cfgbank.bankport;							// 银行端口
	sPack.pack.lvol1 = cfgbank.banktimeout*1000;					// 银行超时时间

	sPack.pack.lvol2 = custid;									// 客户号
	getsysdatetime(sdatetime);
	memcpy(sPack.pack.sdate0,sdatetime,8);						// 交易日期
	memcpy(sPack.pack.stime0,sdatetime+8,6);						// 交易时间
//	des2src(sPack.pack.sholder_ac_no,transdtl->refno);				// 一卡通交易参考号
	des2src(sPack.pack.sphone,tCust.stuempno);					// 学工号
	des2src(sPack.pack.scust_limit,tCust.custname);					// 姓名
	des2src(sPack.pack.scust_auth2,tCust.idno);						// 身份证号
	des2src(sPack.pack.scust_limit2,bankcard.bankcardno);			// 银行卡号
	des2src(sPack.pack.sphone2,area.remark);
	sPack.pack.lvol6 = termid;									// 终端号
	if(bcc_timeout<5)
	   bcc_timeout=5;

	// 云交职-云南省农村信用接口: 个人校验码,非银行密码
	des2src(sPack.pack.semp_pwd,rPack->semp_pwd);
	
	ret = ExtCall(0, drtp_branch, base_funcno, 0, bcc_timeout, &sPack, &aPack, &ArrayPack);
	if (ret < 0 || aPack.head.retCode != 0)
	{
		writelog(LOG_ERR,"extcall 2401 ret[%d],retcode[%d] timeout[%d] ",ret,aPack.head.retCode,bcc_timeout);
		if (ret < 0)				// 通讯错误
		{
			strcpy(szMsg,"调用后台业务失败,业务终止");
			return E_BCC_NETWORK;
		}
		else						// 收到前置返回的错误
		{
			strcpy(szMsg,aPack.pack.vsmess);
			return E_COMMON_ERR;
		}
	}
	if(aPack.pack.lvol1 != 1)		// 前置解包错误
	{	
		strcpy(szMsg,"接收银行数据错误");
		return E_BCC_NETWORK;
	}

	des2src(out_pack->sall_name,aPack.pack.sall_name);				//客户号
	out_pack->damt0 = aPack.pack.damt0;							// 账户余额
	out_pack->damt1 = aPack.pack.damt1;							// 可用余额
	return 0;
}