Example #1
0
int F847107(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int i=0;
	int ret =0;
	char logicdate[11]="";										//业务日期
	char sysdate[11]="";
	char systime[9]="";
	int card_id=0;
	char sMsg[256]="";
	char physical_no[41]="";
	T_t_tif_tradeserial  tradeserial;
	T_t_pif_card		tCard;
	T_t_tif_savdtl tSavdtl;
	T_t_cif_customer tCustomer;
	T_t_pif_spefee 	tSpeFee;
	T_t_aif_account	tAccount;		//帐户表
	InAcc	IA;
	double dSerialNo = 0;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	*pRetCode=0;

	memset(&tCard,0,sizeof(tCard));
	memset(&tCustomer,0,sizeof(tCustomer));
	memset(&IA,0,sizeof(IA));
	memset(&tSpeFee,0,sizeof(tSpeFee));
	memset(&tAccount,0,sizeof(tAccount));
	memset(&tradeserial,0,sizeof(tradeserial));

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

	card_id=rPack->lvol0;
	des2src(physical_no, rPack->sbank_acc);				//物理卡号

	if(amtcmp(rPack->damt0,0)<=0)
	{
		*pRetCode=E_INPUT_AMT;
		goto L_RETU;
	}
	if(amtcmp(rPack->damt1,0)<0)
	{
		*pRetCode=E_INPUT_CARD_BALA;
		goto L_RETU;
	}
	if(rPack->lvol10<1)
	{
		*pRetCode=E_INPUT_CARD_TXCNT;
		goto L_RETU;
	}

	if(amtcmp(rPack->damt1,rPack->damt0)<0)
	{
		writelog(LOG_ERR,"tCard balance[%lf] amount[%lf]",rPack->damt1,rPack->damt0);
		*pRetCode= E_BALANCE_SHORTAGE;
		goto L_RETU;
	}
	getsysdate(sysdate);
	getsystime(systime);
	ret=GetLogicDate(logicdate);								//业务日期
	if(ret)
	{
		*pRetCode=ret;
		goto L_RETU;
	}
	ret=DB_t_pif_card_read_by_card_id(card_id, &tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			*pRetCode=E_CARDNO_NOT_EXIST;
		else
			*pRetCode=E_DB_CARD_R;
		goto L_RETU;
	}
	if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0)
	{
		if('2'==tCard.state_id[CARDSTAT_TYPE_REG])
			*pRetCode = E_CARDNO_LOGOUT;
		else if('3'==tCard.state_id[CARDSTAT_TYPE_REG])
			*pRetCode = E_CARD_CHANGE;
		else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE)
			*pRetCode=E_CARDNO_LOST;
		else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE)
			*pRetCode=E_CARDNO_FREEZE;
		else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE)
			*pRetCode=E_CARDNO_WFAIL;
		goto L_RETU;
	}
	trim(physical_no);
	trim(tCard.physical_no);
	if(strcmp(tCard.physical_no,physical_no)!=0)
	{
		writelog(LOG_ERR,"db physical_no[%s],input physical_no[%s]",tCard.physical_no,physical_no);
		*pRetCode= E_CARD_PHYNO_DIFFER;
		goto L_RETU;
	}
	tradeserial.trade_fee = rPack->damt0;													//支取金额
	ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id,PURSE_NO_ONE,&tAccount);
	if(ret)
	{
		writelog(LOG_ERR,"DB_t_aif_account_read_by_card_id_and_purse_id ret[%d]card_id[%d]purse_id[%d]",ret,card_id);
		if(DB_NOTFOUND==ret)
			*pRetCode= 	E_ACTNO_NOT_EXIST;
		else
			*pRetCode= 	E_DB_ACCOUNT_R;
		goto L_RETU;
	}
	if(amtcmp(tradeserial.trade_fee,tAccount.cur_freebala)>0)
	{
		writelog(LOG_ERR,"tradeserial.trade_fee[%lf]tAccount.cur_freebala[%lf]",tradeserial.trade_fee,tAccount.cur_freebala);
		*pRetCode=  E_BALANCE_SHORTAGE;
		goto L_RETU;
	}

	//查询支票经费本有无充值记录
	ret=ChkSavdtl(card_id,&tSavdtl);
	if(ret)
	{
		writelog(LOG_ERR,"ChkSavdtl ret[%d]",ret);
		*pRetCode=ret;
		goto L_RETU;
	}
	IA.dArrInAmt[0]=tradeserial.trade_fee;
	switch(tSavdtl.bill_type)
	{
		case TYPE_CASH:	//现金
			IA.iArrInFeeSwitch[1]=1;
			break;
		case TYPE_BILL:	//支票
			IA.iArrInFeeSwitch[2]=1;
			break;
		case TYPE_FUNDBOOK:	//经费本
			IA.iArrInFeeSwitch[3]=1;
			break;
		default:
			writelog(LOG_ERR,"type[%d]",tSavdtl.bill_type);
			IA.iArrInFeeSwitch[1]=1;
			break;
	}
	ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer);
	if(ret)
	{
		writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id);
		if(DB_NOTFOUND==ret)
			*pRetCode= E_CUSTOMER_NOT_EXIST;
		else
			*pRetCode= E_DB_CUSTOMER_R;
		goto L_RETU;
	}
	//得到收费类别
	if(tCustomer.fee_type<1)
	{
		ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
			{
				tCustomer.fee_type=tCustomer.cut_type;
			}
			else
			{
				DB_t_cif_customer_free_lock_cur();
				*pRetCode=E_DB_SPEFEE_R;
				goto L_RETU;
			}
		}
		else
		{
			tCustomer.fee_type=tSpeFee.fee_type;
		}
		//更新客户表的收费类别字段
		ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				*pRetCode= E_CUSTOMER_NOT_EXIST;
			else
				*pRetCode= E_DB_CUSTOMER_U;
			goto L_RETU;
		}
	}
	DB_t_cif_customer_free_lock_cur();

	ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo);  	//获得流水号
	if(ret)
	{
		*pRetCode = ret;
		writelog(LOG_ERR," ERRCODE = [%d]",ret);
		goto L_RETU;
	}

	tradeserial.serial_no = D2I(dSerialNo);						//流水号
	tradeserial.other_seri_no = 0;							//上传端流水号
	tradeserial.serial_type = TXCODE_DRAW_DEPOSIT_LOG;		//交易代码
	tradeserial.serial_state = SERISTAT_DEBT;					//流水状态
	des2src(tradeserial.operate_date,sysdate);				//发生日期
	des2src(tradeserial.operate_time,systime);				//发生时间
	des2src(tradeserial.collect_date,sysdate);					//采集日期
	des2src(tradeserial.collect_time,systime);					//采集时间
	des2src(tradeserial.enteract_date,logicdate);				//处理日期
	des2src(tradeserial.enteract_time,systime);				//处理时间
	tradeserial.maindevice_id = rPack->lvol6;					//上传工作站标
	tradeserial.device_id = rPack->lvol7;						//采集设备标识
	tradeserial.card_id = rPack->lvol0;						//卡号
	tradeserial.purse_id = rPack->lvol1;						//钱包号
	tradeserial.customer_id = rPack->lvol2;					//客户标识
	tradeserial.in_balance=rPack->damt1;					//入卡值
	tradeserial.trade_count=rPack->lvol10+1;				//交易次数
	des2src(tradeserial.oper_code , rPack->scust_limit);		//操作员代码
	tradeserial.sys_id = 0;									//外部系统标识

	IA.iCardNo=tCard.card_id;
	IA.iFeeType=tCustomer.fee_type;
	strcpy(IA.sArrInActno[0],tAccount.account_id);
	IA.dArrInAmt[0]=tradeserial.trade_fee;					//账号

	IA.iArrInFeeSwitch[0]=rPack->lvol0;
	IA.iArrInFeeSwitch[5]=rPack->lvol5;
	IA.iArrInFeeSwitch[6]=rPack->lvol6;
	IA.iArrInFeeSwitch[7]=rPack->lvol7;
	IA.iArrInFeeSwitch[8]=rPack->lvol8;
	IA.iArrInFeeSwitch[9]=rPack->lvol9;
	IA.iArrInFeeSwitch[10]=rPack->lvol10;

	//	调用入账子模块
	ret=process(&IA,&tradeserial);
	if(ret)
	{
		writelog(LOG_ERR,"process ret[%d]",ret);
		*pRetCode=ret;
		goto L_RETU;
	}
	sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo);
	for(i=1;i<=IA.iOutTxTypeCnt;i++)
	{
		switch(IA.iArrOutTxType[i])
		{
			case TXTYPE_TOLL_DEPOSIT:
			case TXTYPE_TOLL_DEPOSIT_BILL:
			case TXTYPE_TOLL_DEPOSIT_FUNDBOOK:
			case TXTYPE_DEDUCT_DEPOSIT:
			case TXTYPE_RETURN_DEPOSIT:
				tradeserial.deposit_fee=IA.dArrOutAmt[i];
				break;
			case TXTYPE_PRE_TOLL_BOARD:
			case TXTYPE_PRE_TOLL_BOARD_BILL:
			case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK:
			case TXTYPE_TOLL_BOARD:
			case TXTYPE_DEDUCT_BOARD:
			case TXTYPE_RETURN_BOARD:
			case TXTYPE_RETURN_BOARD_BILL:
			case TXTYPE_RETURN_BOARD_FUNDBOOK:
				tradeserial.boardfee=IA.dArrOutAmt[i];
				break;
			case TXTYPE_TOLL_CHARGE:
			case TXTYPE_TOLL_CHARGE_BILL:
			case TXTYPE_TOLL_CHARGE_FUNDBOOK:
				tradeserial.in_fee=IA.dArrOutAmt[i];
				break;
			case TXTYPE_TOLL_CARDCOST:
			case TXTYPE_TOLL_CARDCOST_BILL:
			case TXTYPE_TOLL_CARDCOST_FUNDBOOK:
				tradeserial.cost_fee=IA.dArrOutAmt[i];
				break;
			default:
				break;
		}
		if(amtcmp(IA.dArrOutAmt[i],0)!=0)
		{
			sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]);
			strcat(out_pack->vsmess,sMsg);
		}
	}
	sprintf(sMsg,"支取前卡余额:%.2lf元 卡当前余额:%.2lf元",tradeserial.in_balance,tradeserial.out_balance);
	strcat(out_pack->vsmess,sMsg);
	writelog(LOG_DEBUG,out_pack->vsmess);
	//	插入卡操作流水表
	ret = DB_t_tif_tradeserial_add(&tradeserial);
	if (ret)
	{
		writelog(LOG_ERR,"ret[%d]",ret);
		if(DB_REPEAT==ret)
			*pRetCode = E_DB_TRADESERIAL_E;
		else
			*pRetCode = E_DB_TRADESERIAL_I;
		goto L_RETU;
	}
	if(amtcmp(tradeserial.out_balance,0)<0)
	{
		*pRetCode=E_ENTER_ACCOUNT;
		goto L_RETU;
	}
	out_pack->damt2=tradeserial.out_balance;							//出卡值
	out_pack->lserial1=tradeserial.serial_no;								//流水号
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
L_RETU:
	return -1;
}
Example #2
0
int F930101(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{

	int ret= 0;
	int dev_usage = 0;
	//T_t_attend_txdtl tTxdtl;
	T_t_door_txdtl tTxdtl;
	T_t_pif_device tDevice;
	T_t_pif_card tCard;
	if(strlen(rPack->sdate0) != 8)
	{
		*pRetCode = E_DEVPHYID_NULL;
		goto L_RETU;
	}

	/*
	ret=chk_dyn_key(rPack->lcert_code,rPack->scust_limit2);
	if(ret)
	{
		writelog(LOG_ERR,"subsys_id[%d]dyn_key[%s]",rPack->lcert_code,rPack->scust_limit2);
		*pRetCode =  ret;
		goto L_RETU;
	}
	*/
	memset(&tTxdtl,0,sizeof(tTxdtl));
	memset(&tDevice,0,sizeof tDevice);

	/*

	tTxdtl.serial_no= rPack->lvol3;						//上传端流水号
	tTxdtl.sys_id  = rPack->lcert_code;					//上传工作站标识(前置机注册号)
//		tTxdtl.mode_code=rPack->lvol6;					//模式代码
	tTxdtl.card_no= rPack->lvol7;						//交易卡号
//		tTxdtl.use_type= rPack->lvol8;						//考勤类型
//		tTxdtl.inductor_no= rPack->lvol9;					//感应头标记
//		tTxdtl.work_mark=rPack->lvol10;					//上下班标志
	tTxdtl.tx_mark=rPack->lvol11;						//999交易标志
	des2src(tTxdtl.device_id, rPack->sdate0);			//物理设备ID
	des2src(tTxdtl.tx_date,rPack->sdate1);				//发生日期(格式化输入的日期)
	des2src(tTxdtl.crc,rPack->sbank_code2);				//CRC校验
	des2src(tTxdtl.tx_time,rPack->spost_code2);			//发生时间(格式化输入的时间)
	getsysdate(tTxdtl.col_date);
	getsystime(tTxdtl.col_time);
//		ret=check(&tTxdtl);
//		if(ret)
//		{
//			tTxdtl.status[0]='5';							//无效交易
//			//tTxdtl.err_code=ret;
//			writelog(LOG_DEBUG,"无效流水device_id[%d]serial_no[%d]",tTxdtl.device_id,tTxdtl.serial_no);
//			return ret;
//		}
//		else
//			tTxdtl.status[0]='1';
	ret = SaveDoorJSBSerial(&tTxdtl);
	*/
	tTxdtl.serial_no= rPack->lvol3;						//上传端流水号
	tTxdtl.sys_id  = rPack->lcert_code;					//上传工作站标识(前置机注册号)
//		tTxdtl.mode_code=rPack->lvol6;					//模式代码
	tTxdtl.card_no= rPack->lvol7;						//交易卡号
	memset(&tCard,0,sizeof tCard);
	ret = DB_t_pif_card_read_by_card_id(tTxdtl.card_no,&tCard);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			// 卡号不存在
			writelog(LOG_ERR,"上传的交易卡号deviceid[%s],cardno[%d],不存在",
				rPack->sdate0,tTxdtl.card_no);
			return 0;
		}
		else
		{
			writelog(LOG_ERR,"上传的交易卡号读取表失败cardno[%d]",tTxdtl.card_no);
			*pRetCode = E_DB_CARD_R;
			goto L_RETU;
		}
	}
//		tTxdtl.use_type= rPack->lvol8;						//考勤类型
//		tTxdtl.inductor_no= rPack->lvol9;					//感应头标记
//		tTxdtl.work_mark=rPack->lvol10;					//上下班标志
	des2src(tTxdtl.phycard_no,tCard.physical_no);
	tTxdtl.cust_id = tCard.cosumer_id; //客户号
	tTxdtl.tx_mark=rPack->lvol11;						//999交易标志
	//des2src(tTxdtl.device_id, rPack->sdate0);			//物理设备ID
	ret = get_devinfo_by_phyid(rPack->sdate0,&tDevice);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			// 设备不存在
			writelog(LOG_ERR,"采集计时宝流水,设备不存在或已注销[%s]"
			,rPack->sdate0);
			return 0;
		}
		else
		{
			*pRetCode = ret;
			goto L_RETU;
		}
	}
	tTxdtl.device_id = tDevice.device_id;
	//if(strlen(rPack->sdate1)==0)
	//	getsysdate(tTxdtl.tx_date);
	//else 	
	if(strlen(rPack->sdate1)==6)
	{
		sprintf(tTxdtl.tx_date,"20%s",rPack->sdate1);
	}
	else
		des2src(tTxdtl.tx_date,rPack->sdate1);				//发生日期(格式化输入的日期)

	des2src(tTxdtl.crc,rPack->sbank_code2);				//CRC校验
	des2src(tTxdtl.tx_time,rPack->spost_code2);			//发生时间(格式化输入的时间)
	getsysdate(tTxdtl.col_date);
	getsystime(tTxdtl.col_time);
	check(&tTxdtl);
	g_dbchkerr=0;
	ret = DB_t_door_txdtl_add(&tTxdtl);
	g_dbchkerr=1;
	if(ret)
	{
		if(DB_REPEAT == ret)
			return 0;
		writelog(LOG_ERR,"插入门禁流水表失败,errcode[%d]",ret);
		writelog(LOG_ERR,"serial_no[%d]phycardid[%s]card_no[%d]device_id[%s]tx_date[%s]tx_time[%s]",
			tTxdtl.serial_no,tTxdtl.phycard_no,tTxdtl.card_no,tTxdtl.device_id,tTxdtl.tx_date,tTxdtl.tx_time);
		*pRetCode = ret;
		goto L_RETU;
	}
	ret = SaveKQSerial(&tTxdtl);
	if(ret)
	{
		writelog(LOG_ERR,"插入考勤流水表失败,errcode[%d]",ret);
		*pRetCode = ret;
		goto L_RETU;
	}
	return 0;
L_RETU:
	return -1;
}
Example #3
0
int F847183(TRUSERID *handle, int iRequest, ST_PACK *rPack, int *pRetCode, char *szMsg)
{

	int ret = 0;
	char    	tx_date[8+1] = "";              	//发生日期
//		char    	tx_time[6+1]="";      		//发生时间
	int		card_no = 0;                    	//卡号
	char    	device_id[8+1] = "";            	//终端机ID
	int		serial_no = 0;                  	//终端机流水号
	int 		flag = 0;
	double 	dUniqno = 0;
	T_t_tif_tradeserial		tOldTradeserial;	//当日流水表
	T_t_tif_tradeserial		tTradeserial;	//当日流水表
	T_t_tif_tradeserial_his	tTradeserialhis;	//历史流水表
	T_t_pif_tradecode tTradeCode;
	T_t_pif_card tCard;
	char sysdate[11] = "";
	char systime[9] = "";
	char sYear[5] = "";
	char sMonDay[5] = "";
	char logic_date[9] = "";
	int days = 0;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	ST_PACK next_pack;

	ResetNormalCPack(&aPack, 0, 1);
	memset(&tTradeserial, 0, sizeof(tTradeserial));
	memset(&tOldTradeserial, 0, sizeof(tOldTradeserial));
	memset(&tTradeserialhis, 0, sizeof(tTradeserialhis));
	memset(&tTradeCode, 0, sizeof tTradeCode);
	memset(&tCard, 0, sizeof tCard);
	getsysdate(sysdate);
	getsystime(systime);
	des2src(tTradeserial.enteract_time, systime);

	des2src(tx_date, rPack->sbank_pwd);
//		des2src(tx_time,rPack->sbank_code);
	card_no = rPack->lvol0;
	des2src(device_id, rPack->sbank_pwd2);
	serial_no = rPack->lvol1;
	trim(rPack->scust_limit);
	trim(rPack->scust_limit2);
	trim(rPack->semp_pwd);
	des2src(sYear, tx_date);
	des2src(sMonDay, tx_date + 4);

	if (strlen(rPack->scust_limit) == 0)
	{
		*pRetCode = E_OPER_NOT_EXIST;
		goto L_RETU;
	}
	if (strlen(rPack->scust_limit2) == 0)
	{
		*pRetCode = E_INPUT_AUTH_OPER_NULL;
		goto L_RETU;
	}
	if (strcmp(rPack->scust_limit, rPack->scust_limit2) == 0)
	{
		writelog(LOG_ERR, "oper[%s]auth_oper[%s]", rPack->scust_limit, rPack->scust_limit2);
		*pRetCode = E_OPER_AND_AUTH_OPER_EQ;
		goto L_RETU;
	}
	ret = chk_oper_pwd(rPack->scust_limit2, rPack->semp_pwd);
	if (ret)
	{
		if (E_OPER_NOT_EXIST == ret)
			*pRetCode = E_AUTH_OPER_NOT_EXIST;
		else if (E_PASSWORD_WRONG == ret)
			*pRetCode = E_AUTH_OPER_PWD;
		else
			*pRetCode = ret;
		goto L_RETU;
	}
	ret = DB_t_pif_card_read_by_card_id(card_no, &tCard);
	if (ret)
	{
		if (DB_NOTFOUND == ret)
			*pRetCode = E_CARDNO_NOT_EXIST;
		else
			*pRetCode = E_DB_CARD_R;
		goto L_RETU;
	}
	if (tCard.state_id[CARDSTAT_TYPE_REG] == '2')
	{
		writelog(LOG_ERR, "冲正交易卡号已注销cardid[%d]", tCard.card_id);
		*pRetCode = E_ACTNO_LOGOUT;
		goto L_RETU;
	}
	//查询当前流水表
	ret = DB_t_tif_tradeserial_read_lock_by_c4_and_operate_date_and_serial_no_and_card_id(tx_date, serial_no, card_no, &tOldTradeserial);
	if (ret)
	{
		writelog(LOG_ERR, "tx_date[%s]serial_no[%d]ret[%d]", tx_date, serial_no, ret);
		if (DB_NOTFOUND != ret)
		{
			*pRetCode = E_DB_TRADESERIAL_R;
			goto L_RETU;
		}
	}
	else
	{
		flag = 1;
		memcpy(&tTradeserial, &tOldTradeserial, sizeof(tTradeserial));
		tTradeserial.other_seri_no = tOldTradeserial.serial_no;					//上传端流水号
		tOldTradeserial.serial_state = SERISTAT_RUSH;				//冲正
		ret = DB_t_tif_tradeserial_update_lock_by_c4(&tOldTradeserial);
		if (ret)
		{
			*pRetCode = E_DB_TRADESERIAL_U;
			writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret);
			goto L_RETU;
		}
		DB_t_tif_tradeserial_free_lock_c4();
	}
	if (!flag)
	{
		//查询历史流水表
		ret = DB_t_tif_tradeserial_his_read_lock_by_c0_and_trans_year_and_trans_mon_day_and_serial_no_and_card_id(sYear, sMonDay, serial_no, card_no, &tTradeserialhis);
		if (ret)
		{
			writelog(LOG_ERR, "year[%s]date[%d]serialno[%d]ret[%d]", sYear, sMonDay, serial_no, ret);
			if (DB_NOTFOUND == ret)
			{
				*pRetCode = E_SERIALNO_NOT_EXIST;
				goto L_RETU;
			}
			else
			{
				*pRetCode = E_DB_TRADESERIAL_R;
				goto L_RETU;
			}
		}
		tTradeserial.other_seri_no = tTradeserialhis.serial_no;						//上传端流水号
		tTradeserial.serial_state = tTradeserialhis.serial_state;						//流水状态
		tTradeserial.tmark = tTradeserialhis.tmark;								//999交易标记
		tTradeserial.maindevice_id = tTradeserialhis.maindevice_id;							//上传工作站标识(前置机注册号)
		tTradeserial.sys_id = tTradeserialhis.sys_id;
		tTradeserial.comu_ver = tTradeserialhis.comu_ver;							//通信版本号
		// add by 汤成 2007-10-31
		tTradeserial.device_id = tTradeserialhis.device_id;
		des2src(tTradeserial.devphy999_id, tTradeserialhis.devphy999_id);				//物理设备ID
		des2src(tTradeserial.dev_auth, tTradeserialhis.dev_auth);					//终端设备授权号
		des2src(tTradeserial.crc, tTradeserialhis.crc);								//CRC校验
		tTradeserial.card_id = tTradeserialhis.card_id;								//交易卡号
		tTradeserial.purse_id = tTradeserialhis.purse_id;							//消费钱包号
		tTradeserial.in_balance = tTradeserialhis.in_balance;						//入卡金额
		tTradeserial.out_balance = tTradeserialhis.out_balance;					//出卡金额
		tTradeserial.trade_fee = tTradeserialhis.trade_fee;						//本次消费金额
		tTradeserial.trade_count = tTradeserialhis.trade_count;							//当前卡中帐户消费次数(累计使用次数)
		tTradeserial.serial_type = tTradeserialhis.serial_type;							//交易代码
		tTradeserial.boardfee = tTradeserialhis.boardfee	;						//搭伙费
		des2src(tTradeserial.operate_date, tTradeserialhis.operate_date);					//发生日期(格式化输入的日期)
		des2src(tTradeserial.operate_time, tTradeserialhis.operate_time);					//发生时间(格式化输入的时间)
		des2src(tTradeserial.enteract_date, tTradeserialhis.enteract_date);
		tTradeserial.condition_id = tTradeserialhis.condition_id;							// 收费科目
		tTradeserialhis.serial_state = SERISTAT_RUSH;				//冲正
		// 保存被冲正交易的操作员号
		des2src(tTradeserialhis.oper_code, tTradeserialhis.oper_code);
		ret = DB_t_tif_tradeserial_his_update_lock_by_c0(&tTradeserialhis);
		if (ret)
		{
			*pRetCode = E_DB_TRADESERIAL_U;
			writelog(LOG_ERR, "DB_t_tif_tradeserial_update_lock_by_c4[%d]", ret);
			goto L_RETU;
		}
		DB_t_tif_tradeserial_his_free_lock_by_c0();
	}
	if (tTradeserial.card_id != card_no)
	{
		writelog(LOG_ERR, "流水中卡号不符cardid[%d]serial[%d]", card_no, tTradeserial.card_id);
		*pRetCode = E_SERIALNO_NOT_EXIST;
		goto L_RETU;
	}
	if (tTradeserial.serial_state == SERISTAT_RUSH)
	{
		*pRetCode = E_TX_SERIAL_CZ;
		goto L_RETU;
	}
	if (tTradeserial.serial_state != SERISTAT_DEBT)
	{
		*pRetCode = E_TX_SERIAL_CANNOT_CZ;
		goto L_RETU;
	}
	if (amtcmp(tTradeserial.trade_fee, 0) == 0)
	{
		*pRetCode = E_TX_SERIAL_CANNOT_CZ;
		strcpy(szMsg,"交易金额有误!");
		goto L_RETU;
	}

	ret = DB_t_pif_tradecode_read_by_tradecode(tTradeserial.serial_type, &tTradeCode);
	if (ret)
	{
		if (DB_NOTFOUND == ret)
			*pRetCode = E_DB_TRADECODE_N;
		else
			*pRetCode = E_DB_TRADECODE_R;
		goto L_RETU;
	}

	if (tTradeCode.rush_flag != IS_YES)
	{
		*pRetCode = E_TX_SERIAL_CANNOT_CZ;
		strcpy(szMsg,"该交易不能被冲正");
		goto L_RETU;
	}

	ret = GetLogicDate(logic_date);						//业务日期
	if (ret)
	{
		*pRetCode = ret;
		writelog(LOG_ERR, "GetLogicDate  err ret[%d]", ret);
		goto L_RETU;
	}
	// 小于 0 , 则不判断
	if (tTradeCode.rush_max_day >= 0)
	{
		ret = DiffDay(logic_date, tTradeserial.enteract_date, &days);
		if (ret)
		{
			*pRetCode = ret;
			sprintf("logicdate[%s],tradedate[%s]",logic_date, tTradeserial.enteract_date);
			goto L_RETU;
		}
		if (days > tTradeCode.rush_max_day)
		{
			writelog(LOG_ERR, "流水入账日期[%s],已超过期限[%d]天",
					 tTradeserial.enteract_date, days);
			*pRetCode = E_TX_SERIAL_CANNOT_CZ;
			strcpy(szMsg, "流水日期已超过可冲正期限!");
			goto L_RETU;
		}
	}

	if (tTradeCode.restrict_oper == IS_YES)
	{
		if (strcmp(rPack->scust_limit, tTradeserial.oper_code) != 0)
		{
			strcpy(szMsg, "必须由作此次交易的操作员来冲正");
			*pRetCode = E_TX_SERIAL_CANNOT_CZ;
			goto L_RETU;
		}
	}

	// 保存上传的操作员号
	des2src(tTradeserial.operate_date, sysdate);
	des2src(tTradeserial.operate_time, systime);
	des2src(tTradeserial.collect_date, sysdate);
	des2src(tTradeserial.collect_time, systime);

	des2src(tTradeserial.enteract_date, logic_date);						//业务日期
	des2src(tTradeserial.enteract_time, systime);
	tTradeserial.in_balance = rPack->damt1;
	tTradeserial.trade_fee = -1 * tTradeserial.trade_fee;					//本次消费金额
	tTradeserial.boardfee = -1 * tTradeserial.boardfee;					//本次消费管理费
	tTradeserial.out_balance = tTradeserial.in_balance - tTradeserial.trade_fee;
	if (rPack->lvol10 > 0)
		tTradeserial.trade_count = rPack->lvol10 + 1;
	tTradeserial.maindevice_id = rPack->lvol6;
	// 上传的操作员号
	des2src(tTradeserial.oper_code, rPack->scust_limit);
	tTradeserial.reviseserial_no = tTradeserial.other_seri_no;

	//取流水号,从帐处理
	ret = getNewUniqNo(KEYTYPE_TRADESERIAL, &dUniqno);
	if (ret)
	{
		*pRetCode = ret;
		writelog(LOG_ERR, "getNewUniqNo err[%d]", ret);
		goto L_RETU;
	}
	tTradeserial.serial_no = D2I(dUniqno);
	//######################################################
	//入账处理
	switch (tTradeserial.serial_type)
	{
	case 930031:
		// 交易冲正
		if (amtcmp(tTradeserial.trade_fee, 0) == 0)
			break;
		tTradeserial.serial_type = TXCODE_TX_REVEAL;
		ret = process930031(&tTradeserial);
		if (ret)
		{
			//业务处理失败处理
			*pRetCode = ret;
			goto L_RETU;
		}
		break;
	case 930034:
		// 充值冲正
		if (amtcmp(tTradeserial.trade_fee, 0) == 0)
			break;
		tTradeserial.serial_type = TXCODE_TX_REVEAL;
		ret = process930034(&tTradeserial);
		if (ret)
		{
			//业务处理失败处理
			*pRetCode = ret;
			goto L_RETU;
		}
		break;
	case 930036:
		// 搭伙费冲正
		if (amtcmp(tTradeserial.trade_fee, 0) == 0)
			break;
		tTradeserial.serial_type = TXCODE_TX_REVEAL;
		ret = process930036(&tTradeserial);
		if (ret)
		{
			//业务处理失败处理
			*pRetCode = ret;
			goto L_RETU;
		}
		break;
	case 847106: // 现金充值冲正
		memset(&next_pack,0,sizeof next_pack);
		tTradeserial.serial_type = TXCODE_SAVING_CASH;
		ret = do_flush_847106(&tTradeserial,&tCard);
		if(ret)
		{
			*pRetCode = ret;
			goto L_RETU;
		}
		break;
	default:
		*pRetCode = E_TXCODE_NOT_EXIST;	//交易码错误
		goto L_RETU;
	}
	//######################################################
	//添加交易流水
	tTradeserial.serial_state = SERISTAT_DEBT;
	ret = DB_t_tif_tradeserial_add(&tTradeserial);
	if (ret)
	{
		writelog(LOG_ERR, "DB_t_tif_tradeserial_add ret[%d]", ret);
		if (DB_REPEAT == ret)
			*pRetCode = E_DB_TRADESERIAL_E;
		else
			*pRetCode = E_DB_TRADESERIAL_I;
		goto L_RETU;
	}
	if (amtcmp(tTradeserial.out_balance, 0) < 0)
	{
		*pRetCode = E_ENTER_ACCOUNT;
		goto L_RETU;
	}
	SetCol(handle, 0);
	SetCol(handle, F_LSERIAL1, F_DAMT2, F_DAMT3, F_VSMESS, 0);
	out_pack->lserial1 = tTradeserial.serial_no;
	out_pack->damt2 = tTradeserial.out_balance;
	out_pack->damt3 = -tTradeserial.trade_fee;
	sprintf(out_pack->vsmess, "流水号:%d 冲正金额:%.2lf元 冲正前卡余额:%.2lf元 卡当前余额:%.2lf元", tTradeserial.serial_no, -tTradeserial.trade_fee, tTradeserial.in_balance, tTradeserial.out_balance);
	writelog(LOG_DEBUG, out_pack->vsmess);
	PutRow(handle, out_pack, pRetCode, szMsg);
	return 0;
L_RETU:
	return -1;
}
Example #4
0
static int elect_request_changzhou(ST_PACK *in_pack,char ext_msg[256]){
	int ret = 0;	

	char c_drtbranch[10]="";
	char c_bccbasefuncno[10]="";
	int DRTP_BRANCH =0;
	int BCC_BASEFUNCNO =0;
	ST_PACK ArrayPack;			// 设置返回包
	ST_CPACK aPack;				// 设置应答包
	ST_CPACK sPack;			 	// 设置发送包
	int card_id;

	T_t_cif_customer 	tCustomer;
	T_t_pif_spefee 	tSpeFee;
	T_t_aif_account	tAccount;
	T_t_pif_card	tCard;

	memset(&tCustomer,0,sizeof(tCustomer));
	memset(&tSpeFee,0,sizeof(tSpeFee));
	memset(&tAccount,0,sizeof(tAccount));
	memset(&tCard,0,sizeof(tCard));

	card_id=in_pack->lvol0;

	ret=DB_t_pif_card_read_by_card_id(card_id, &tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			ret=E_CARDNO_NOT_EXIST;
		else
			ret=E_DB_CARD_R;
		return ret;
	}

	ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer);
	if(ret)
	{
		writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id);
		if(DB_NOTFOUND==ret)
			ret= E_CUSTOMER_NOT_EXIST;
		else
			ret= E_DB_CUSTOMER_R;
		return ret;
	}
	

	ret=GetParameter(2501, c_drtbranch);
	if(ret){
		writelog(LOG_ERR,"get_parameter error,error code=[%d]",ret);
		return ret;
	}
	ret=GetParameter(2502, c_bccbasefuncno);
	if(ret){
		writelog(LOG_ERR,"get_parameter error,error code=[%d]",ret);
		return ret;
	}
	
	DRTP_BRANCH = atoi(c_drtbranch);
	BCC_BASEFUNCNO = atoi(c_bccbasefuncno);

	ResetNormalCPack(&aPack, 0, 1);
	memset(&ArrayPack, 0, sizeof(ArrayPack));
	ResetNormalCPack(&sPack, 0, 1);
	SetHeadCol(&sPack, F_SSECTYPES,F_LVOL0,F_LVOL1,F_SORDER0,F_SCUST_AUTH,0);       // 设置发送windows BU的头部视图信息
	sPack.head.RequestType = 847357;
	sPack.pack.lvol0=in_pack->lvol10;//房间号
	sPack.pack.lvol1=D2I(in_pack->damt1*100);//转账金额(分)
	memcpy(sPack.pack.sorder0,tCustomer.cut_name,11);
	
	ret = ExtCall(0, DRTP_BRANCH, BCC_BASEFUNCNO, 0, TIMEOUT, &sPack, &aPack, &ArrayPack);
	if (ret < 0||aPack.head.retCode!=0)
	{
		if(ret<0)
		{
			writelog(LOG_ERR,"Call 847357 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode);
			return ret;
		}
		else
		{
			writelog(LOG_ERR,"Call 847357 error,errcode=[%d],retCode=[%d]",ret,aPack.head.retCode);
			return aPack.head.retCode;
		}
	}

	return 0;
}
Example #5
0
static int do_process(T_t_pif_card *tCard, T_t_tif_writefailed *tWriteFailed, ST_PACK *rPack, T_t_tif_tradeserial *tradeserial)
{
	int ret = 0;
	int free_lock_flag = 1;                     //0关闭, 1表示打开
	char logicdate[11]="";
	char sysdate[11]="";
	char systime[9]="";
	char operate_date[11]="";
	//	char sSerialno[20]="";
	char physical_no[41]="";
	char old_physical_no[41]="";
	char deal_flag[1 + 1] = "";
	int 	iSerialno=0;
	int 	card_id=0;
	int 	serial_type=0;
	int   flag=0;
	double dSerialno=0;
	double  dAmt=0; 
	int cnt_purse_no = 0;
	int card_use_cnt=0;
	int seri_use_cnt=0;
	double seri_in_bala=0;
	double seri_out_bala=0;
	double seri_in_bala_next=0;
	double seri_out_bala_next=0;
	int amt_flag=0;
	char tx_date[11]="";

	T_t_tif_tradeserial_his tradeserialhis;
	T_t_tif_tradeserial old_tradeserial;

	memset(&old_tradeserial,0,sizeof(old_tradeserial));
	memset(&tradeserialhis,0,sizeof(tradeserialhis));

	des2src(physical_no,rPack->sbank_acc);
	card_id=rPack->lvol0;
	card_use_cnt=rPack->lvol8;
	cnt_purse_no = rPack->lvol4;

	getsysdate(sysdate);
	getsystime(systime);
	deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_Y;
	ret=GetLogicDate(logicdate);								//业务日期
	if(ret)
	{
		free_lock_flag = 0;
		goto L_RETU_INNER;
	}
	//判断卡状态是否为写卡未成功状态
	ret=DB_t_pif_card_read_by_card_id(card_id, tCard);
	if(ret)
	{
		writelog(LOG_ERR,"card_id[%d]",card_id);
		if(DB_NOTFOUND==ret)
			ret = E_CARDNO_NOT_EXIST;
		else
			ret = E_DB_CARD_R;
		free_lock_flag = 0;
		goto L_RETU_INNER;
	}

	if(STATE_FALSE==tCard->state_id[CARDSTAT_TYPE_WFAIL])
	{
		ret = E_CARDSTATE_NOTWRITEFAIL;
		free_lock_flag = 0;
		goto L_RETU_INNER;
	}
	ret = DB_t_tif_writefailed_read_lock_by_c1_and_card_id_and_purese_no_and_deal_flag(tCard->card_id,cnt_purse_no,&deal_flag[0],tWriteFailed);
	if (ret)
	{
		if (DB_NOTFOUND == ret)
			//            ret = E_DB_WRITEFAILED_N;
			ret = E_WRITEFAILED_DEAL_FLAG_N;         // 没有查到, 就是已经写过了
		else
			ret = E_DB_WRITEFAILED_R;
		goto L_RETU_INNER;
	}

	//  writelog(LOG_ERR,"XXX");
	iSerialno = tWriteFailed->serial_no;
	des2src(operate_date,tWriteFailed->tx_date);

	writelog(LOG_DEBUG,"Serialno[%d]",iSerialno);
	writelog(LOG_DEBUG,"operate_date[%s]",operate_date);
	writelog(LOG_DEBUG,"logictime[%s]",logicdate);
	if(strncmp(logicdate,operate_date,8)==0)
	{
		ret=DB_t_tif_tradeserial_read_by_serial_no(iSerialno,&old_tradeserial);
		if(ret)
		{
			writelog(LOG_ERR,"Serialno[%d]",iSerialno);
			if(DB_NOTFOUND==ret)
				ret = E_SERIALNO_NOT_EXIST;
			else
				ret = E_DB_TRADESERIAL_R;
			goto L_RETU_INNER;
		}
		if(card_id!=old_tradeserial.card_id)
		{
			writelog(LOG_ERR,"input card_id [%d],tradeserial card_id[%d]",card_id,old_tradeserial.card_id);
			ret = E_CARDNO_SERIAL_NE;
			goto L_RETU_INNER;
		}
		serial_type=old_tradeserial.serial_type;
		flag=TYPE_CUR;
	}
	else
	{
		// TODO: 需要在数据库上建立索引
		ret=DB_t_tif_tradeserial_his_read_by_operate_date_and_serial_no(operate_date,iSerialno,&tradeserialhis);
		if(ret)
		{
			writelog(LOG_ERR,"operate_date[%s]Serialno[%d]",operate_date,iSerialno);
			if(DB_NOTFOUND==ret)
				ret = E_SERIALNO_NOT_EXIST;
			else
				ret = E_DB_TRADESERIAL_R;
			goto L_RETU_INNER;
		}
		if(card_id!=tradeserialhis.card_id)
		{
			writelog(LOG_ERR,"input card_id [%d],tradeserial card_id[%d]",card_id,tradeserialhis.card_id);
			ret = E_CARDNO_SERIAL_NE;
			goto L_RETU_INNER;
		}
		serial_type=tradeserialhis.serial_type;
		flag=TYPE_HIS;
	}
	if(TYPE_CUR==flag)
	{
		seri_in_bala=old_tradeserial.in_balance;
		seri_out_bala=old_tradeserial.out_balance;
		strncpy(tx_date,old_tradeserial.operate_date,sizeof(tx_date));
		dAmt=D4U5(old_tradeserial.out_balance-old_tradeserial.in_balance,2); 		//发生额=出卡值-入卡值
		seri_use_cnt=old_tradeserial.trade_count;
	}
	else
	{
		seri_in_bala=tradeserialhis.in_balance;
		seri_out_bala=tradeserialhis.out_balance;
		strncpy(tx_date,tradeserialhis.operate_date,sizeof(tx_date));
		dAmt=D4U5(tradeserialhis.out_balance-tradeserialhis.in_balance,2); 		//发生额=出卡值-入卡值
		seri_use_cnt=tradeserialhis.trade_count;
	}
	des2src(old_physical_no,tCard->physical_no);
	trim(physical_no);
	trim(old_physical_no);
	switch(serial_type)
	{
		//发行正式卡
	case  847101:
		//补办正式卡
	case  847104:
		//发行过渡临时卡
	case 847116:
		//发行非记名临时卡
	case 847124:
	case 847125:
	case 847126:
		if(strcmp(old_physical_no,physical_no)!=0)
		{
			ret=IsExistCardByPhyCardNo(physical_no);
			if(ret)
			{
				goto L_RETU_INNER;
			}
			//修改卡标志,置为正常状态
			ret=DB_t_pif_card_read_lock_by_cur_and_card_id(card_id, tCard);
			if(ret)
			{
				writelog(LOG_ERR,"card_id[%d]",card_id);
				if(DB_NOTFOUND==ret)
					ret = E_CARDNO_NOT_EXIST;
				else
					ret = E_DB_CARD_R;
				goto L_RETU_INNER;
			}
			ret = InsertToCutUpdList(tCard->card_id,CUTUPD_CH_OLDCARD,tCard->physical_no);
			if(ret)
			{
				DB_t_pif_card_free_lock_by_cur();
				goto L_RETU_INNER;
			}
			des2src(tCard->physical_no,physical_no);			//更换物理卡号
			ret=DB_t_pif_card_update_lock_by_cur(tCard);
			if(ret)
			{
				writelog(LOG_ERR,"card_id[%d]",card_id);
				if(DB_NOTFOUND==ret)
					ret = E_CARDNO_NOT_EXIST;
				else
					ret = E_DB_CARD_U;
				goto L_RETU_INNER;
			}
			DB_t_pif_card_free_lock_by_cur();
			ret = InsertToCutUpdList(tCard->card_id,CUTUPD_CH_NEWCARD,tCard->physical_no);
			if(ret)
			{
				goto L_RETU_INNER;
			}
			// 宏定义的判断, 0表示成功, 1表示不需要插入
			/*
			if (0 == insert_chcard_blacklist(serial_type))
			{
				ret = InsertToBlkList(tCard->card_id,CHCARD_BLACKLIST);
				if (ret)
				{
					goto L_RETU_INNER;
				}	
			}
			*/
			// add by 汤成 2005-8-10
			// 增加向名单表写入记录
			/*
			   switch(serial_type)
			   {
			//补办正式卡
			case  847104:
			//发行过渡临时卡
			case 847116:
			// 记名临时卡
			//case 847124:
			// VIP 卡
			case 847126:
			ret = InsertToBlkList(tCard.card_id,CHCARD_BLACKLIST);
			if(ret)
			{
			goto L_RETU_INNER;
			}
			break;
			default:
			break;
			}
			*/
		}
		tradeserial->in_balance=0;													//入卡值
		des2src(tWriteFailed->comments, "补写卡成功");
		break;
		//补写水控小钱包, 因小钱包扣款失败而起
		//水控小钱包补写归类到847119中,不单独编写
	case 847300:
		des2src(tWriteFailed->comments, "小钱包补写卡成功");
		tradeserial->in_balance = rPack->damt1;
		writelog(LOG_ERR,"小钱包入卡值[%f]",tradeserial->in_balance);
		break;
		//补写水控大钱包, 因大钱包扣款失败而起
		//水控制大钱包补写归类到847119中, 不单独编写
	case 847301:
		des2src(tWriteFailed->comments, "大钱包补写卡成功");
		tradeserial->in_balance = rPack->damt1;
		break;
		//银行转帐-Added by hhd at 20051225
		//考虑到有可能圈存写卡成功,但是提示失败
		//避免重复写卡
	case 240001:
		//判断卡中交易次数是否等于发生错误的流水的交易次数
		writelog(LOG_ERR,"card_use_cnt=[%d],seri_use_cnt=[%d]",card_use_cnt,seri_use_cnt);
		if((card_use_cnt+1)==seri_use_cnt)
		{
			//判断上传入卡值是否等于发生错误的流水的入卡值
			if(amtcmp(rPack->damt1,seri_in_bala)==0)	   //入卡值等于入卡值,卡没有写上
				tradeserial->in_balance=rPack->damt1;
			else if(amtcmp(rPack->damt1,seri_out_bala)==0)  //入卡值等于出卡值,卡已经写上
			{
				tradeserial->in_balance=rPack->damt1;
				amt_flag=1;
			}
			else
			{
				writelog(LOG_ERR,"In_balance abnormity,in_bala=[%f]",rPack->damt1);
				ret = E_ENTER_ACCOUNT;
				goto L_RETU_INNER;
			}
		}
		else if((card_use_cnt+1)>seri_use_cnt)
		{
			//当写卡不成功时,一般不会更新卡的交易次数,
			//导致下一次的交易次数还是等于失败流水的次数,
			//所以去下一条流水的时候,如果取不到,就+1
			ret=Get_card_next_serial(tCard->card_id,tx_date,seri_use_cnt,&seri_in_bala_next,&seri_out_bala_next);
			if(ret)
			{
				if(DB_NOTFOUND==ret)
				{
					ret=Get_card_next_serial(tCard->card_id,tx_date,seri_use_cnt+1,&seri_in_bala_next,&seri_out_bala_next);
					if(ret)
					{
						writelog(LOG_ERR,"Get_card_next_serial(=) error,errcode=[%d]",ret);
						writelog(LOG_ERR,"没有找到下一笔流水");
						goto L_RETU_INNER;
					}
				}
				else
				{
					writelog(LOG_ERR,"Get_card_next_serial(+1) error,errcode=[%d]",ret);
					goto L_RETU_INNER;
				}
			}
			writelog(LOG_INFO,"seri_in_bala_next=[%f],seri_in_bala=[%f],seri_out_bala=[%f]",seri_in_bala_next,seri_in_bala,seri_out_bala);

			if(amtcmp(seri_in_bala_next/100,seri_in_bala)==0)
				tradeserial->in_balance=rPack->damt1;
			else if(amtcmp(seri_in_bala_next/100,seri_out_bala)==0)
			{
				tradeserial->in_balance=rPack->damt1;
				amt_flag=1;
			}
			else
			{
				tradeserial->in_balance=rPack->damt1;
				writelog(LOG_ERR,"In_balance abnormity,in_bala=[%f]",rPack->damt1);
				ret = E_ENTER_ACCOUNT;
				goto L_RETU_INNER;
			}
		}
		else
		{
			writelog(LOG_ERR,"In_total_cnt abnormity,in_total_cnt=[%d]",card_use_cnt);
			ret = E_ENTER_ACCOUNT;
			goto L_RETU_INNER;
		}
	default:
		if(strcmp(old_physical_no,physical_no)!=0)
		{
			writelog(LOG_ERR,"db physical_no[%s],input physical_no[%s]",old_physical_no,physical_no);
			ret = E_CARD_PHYNO_DIFFER;
			goto L_RETU_INNER;
		}
		tradeserial->in_balance=rPack->damt1;										//入卡值
		break;
	}
	if(TYPE_CUR==flag)
		dAmt=D4U5(old_tradeserial.out_balance-old_tradeserial.in_balance,2); 		//发生额=出卡值-入卡值
	else
		dAmt=D4U5(tradeserialhis.out_balance-tradeserialhis.in_balance,2); 		//发生额=出卡值-入卡值
	//说明不需要写卡,则发生额置为0
	if(amt_flag==1)
	{
		tradeserial->trade_fee=0;											//补写卡值
	}
	else
	{
		tradeserial->trade_fee=dAmt;											//补写卡值
	}
	tradeserial->out_balance=tradeserial->in_balance+dAmt;					//出卡值
	writelog(LOG_ERR,"小钱包出卡值[%f]",tradeserial->out_balance);
	writelog(LOG_ERR,"小钱包交易金额[%f]",dAmt);

	if(tradeserial->out_balance<0||tradeserial->out_balance>999)
	{
		writelog(LOG_ERR,"tradeserial.out_balance[%lf]",tradeserial->out_balance);
		ret = E_TX_SERIAL;
		goto L_RETU_INNER;
	}
	writelog(LOG_DEBUG,"写卡失败日期%s,补写流水号%d,交易码%d,卡号%d,补写金额%.2lf,入卡值%lf,出卡值%lf",operate_date,iSerialno,serial_type,card_id,dAmt,tradeserial->in_balance,tradeserial->out_balance);

	ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialno);  				//获得流水号
	if(ret)
	{
		writelog(LOG_ERR,"ret [%d]",ret);
		goto L_RETU_INNER;
	}

	tradeserial->serial_no = D2I(dSerialno);											//流水号
	tradeserial->other_seri_no = 0;												//上传端流水号
	tradeserial->serial_type = TXCODE_REWRITE_CARD;								//交易代码;备注:发卡+充值 用一个交易码,即847101; 发卡(不充值)另用一个交易码,即新的发卡程序文件名,从而区分发卡充值与发卡不充值的卡操作信息。
	tradeserial->serial_state = SERISTAT_DEBT;										//流水状态
	des2src(tradeserial->operate_date,sysdate);											//发生日期
	des2src(tradeserial->operate_time,systime);											//发生时间
	des2src(tradeserial->collect_date,sysdate);												//采集日期
	des2src(tradeserial->collect_time,systime);												//采集时间
	des2src(tradeserial->enteract_date,logicdate);											//处理日期
	des2src(tradeserial->enteract_time,systime);											//处理时间
	des2src(tradeserial->oper_code , rPack->scust_limit);
	tradeserial->maindevice_id = rPack->lvol6;											//上传工作站标识
	tradeserial->device_id = rPack->lvol7;												//采集设备标识
	tradeserial->card_id = tCard->card_id;											//卡号
	des2src(tradeserial->showid,tCard->showid);										//显示卡号
	tradeserial->purse_id = cnt_purse_no;										//钱包号,根据具体发现需要补写的钱包号决定
	tradeserial->customer_id = tCard->cosumer_id;									//客户标识
	tradeserial->reviseserial_no = iSerialno;											//原写卡失败流水号
	tradeserial->trade_count = card_use_cnt + 1;                                    //交易次数为卡交易次数+1           
	//	插入交易流水表
	ret = DB_t_tif_tradeserial_add(tradeserial);
	if (ret)
	{
		writelog(LOG_ERR,"ret[%d]",ret);
		if(DB_REPEAT==ret)
			ret = E_DB_TRADESERIAL_E;
		else
			ret = E_DB_TRADESERIAL_I;
		goto L_RETU_INNER;
	}
	/******************************************************************/
	//更新写卡失败表
	tWriteFailed->deal_serial_no = tradeserial->serial_no;
	//	writelog(LOG_ERR,"流水号[%d]",tWriteFailed->deal_serial_no);
	tWriteFailed->deal_bala = tradeserial->trade_fee;
	des2src(tWriteFailed->deal_date,sysdate);
	des2src(tWriteFailed->deal_time,systime);
	//	tWriteFailed->deal_flag[0] = CARDWFAIL_PACKET_DEAL_FLAG_N;
	ret = DB_t_tif_writefailed_update_lock_by_c1(tWriteFailed);
	if (ret)
	{
		if (DB_NOTFOUND == ret)
		{
			ret = E_DB_WRITEFAILED_N;
		}
		else
		{
			ret = E_DB_WRITEFAILED_U;    
		}
		goto L_RETU_INNER;
	}
	DB_t_tif_writefailed_free_lock_by_c1();
	/******************************************************************/
	return 0;
L_RETU_INNER:
	if (free_lock_flag)
		DB_t_tif_writefailed_free_lock_by_c1();
	return ret;
}
Example #6
0
static int packege_elec_request(ST_PACK *in_pack,int flag,char *send_data){
	int ret;
	ext_elect_req_t* elect_req_t;
	elect_req_t=(ext_elect_req_t*)send_data;
	double money=0;			//充值金额
	char serialno[10]="";
	char sysdate[11]="";
	char systime[9]="";
	char sysdatetime[20]="";
	unsigned char buf[106]="";
	unsigned char soutmd5[16]="";
	char outmd5[32]="";
	T_t_pif_card	tCard;
	memset(&tCard,0,sizeof(tCard));
	if(flag==1){//房间查询不加密
		memcpy(elect_req_t->prix,"0",1);
	}else{
		memcpy(elect_req_t->prix,"1",1);
	}
	
	memcpy(elect_req_t->length,"0141",4);	
	
	if(flag==1){
		memcpy(elect_req_t->type,"0001",4);
		
	}else if(flag==2){
		memcpy(elect_req_t->type,"0002",4);
	}

	memset(elect_req_t->bitery,'0',sizeof(elect_req_t->bitery));
	sprintf(elect_req_t->room,"%-20s",in_pack->saddr);
	ret=DB_t_pif_card_read_by_card_id(in_pack->lvol0, &tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			ret=E_CARDNO_NOT_EXIST;
		else
			ret=E_DB_CARD_R;
		return ret;
	}
	sprintf(elect_req_t->cutid,"%-22d",tCard.cosumer_id);	
	money = in_pack->damt1;
	int i_money=D2I(D4U5(money*100,0));
	sprintf(elect_req_t->money,"%07d",i_money);
	ret=get_datetime_from_db(sysdate,systime);
	if(ret)
	{
		writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret);
		getsysdate(sysdate);
		getsystime(systime);
	}
	strcpy(sysdatetime,sysdate+4);
	strcat(sysdatetime,systime);
	memcpy(elect_req_t->datetime,sysdatetime,10);
	memcpy(elect_req_t->tracenum,sysdate,8);
	sprintf(serialno,"%010d",in_pack->lvol6);
	memcpy(elect_req_t->tracenum+8,serialno,10);
	memcpy(elect_req_t->retnum,"0000",4);
	memcpy(elect_req_t->clientid,"0001",4);
	memset(outmd5,'0',32);
	if(flag==1){
		sprintf(elect_req_t->signcheck,"%s",outmd5);
	}else if(flag==2){
		memcpy(buf,elect_req_t->type,105);	
		writelog(LOG_ERR,"buf data=[%s]",buf);
		CalcMD5(buf,105,soutmd5);
		dec2hex(soutmd5,16,outmd5);
		writelog(LOG_ERR,"outmd5 data=[%s]",outmd5);
		sprintf(elect_req_t->signcheck,"%s",outmd5);
	}	
	
	
	return 0;
	
}
Example #7
0
//系统正式入账
 int enter_account(ST_PACK *in_pack,InAcc *IA,ST_PACK *out_pack,T_t_tif_tradeserial *tradeserial){
	int ret = 0;
	int i=0;
	int	card_id = 0;
	char logicdate[11]="";
	char sysdate[11]="";
	char systime[9]="";
	char sMsg[256]="";
	
	T_t_cif_customer 	tCustomer;
	T_t_pif_spefee 	tSpeFee;
	T_t_aif_account	tAccount;
	T_t_pif_card	tCard;


	memset(&tCustomer,0,sizeof(tCustomer));
	memset(&tSpeFee,0,sizeof(tSpeFee));
	memset(&tAccount,0,sizeof(tAccount));
	memset(&tCard,0,sizeof(tCard));
//	memset(&tradeserial,0,sizeof tradeserial);

	card_id=in_pack->lvol0;
	
	ret=get_datetime_from_db(sysdate,systime);
	if(ret)
	{
		writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret);
		getsysdate(sysdate);
		getsystime(systime);
		return ret;
	}
	ret=GetLogicDate(logicdate);								//业务日期
	if(ret)
	{
		writelog(LOG_ERR,"GetLogicDate error,errcode=[%d]",ret);
		return ret;
	}

	ret=DB_t_pif_card_read_by_card_id(card_id, &tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			ret=E_CARDNO_NOT_EXIST;
		else
			ret=E_DB_CARD_R;
		return ret;
	}


	if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0)
	{
		if('2'==tCard.state_id[CARDSTAT_TYPE_REG])
			ret= E_CARDNO_LOGOUT;
		else if('3'==tCard.state_id[CARDSTAT_TYPE_REG])
			ret = E_CARD_CHANGE;
		else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE)
			ret=E_CARDNO_LOST;
		else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE)
			ret=E_CARDNO_FREEZE;
		else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE)
			ret=E_CARDNO_WFAIL;
		return ret;
	}

	
	//根据卡号和钱包号得到消费者账号(借方)
	ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id, PURSE_NO_ONE,&tAccount);
	if(ret)
	{
		writelog(LOG_ERR,"DB_t_aif_account_read_by_card_id_and_purse_id ret[%d]card_id[%d]",ret,card_id);
		if(DB_NOTFOUND==ret)
			ret=E_ACTNO_NOT_EXIST;
		else
			ret=E_DB_ACCOUNT_R;
		return ret;
	}
	
	ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer);
	if(ret)
	{
		writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id);
		if(DB_NOTFOUND==ret)
			ret= E_CUSTOMER_NOT_EXIST;
		else
			ret= E_DB_CUSTOMER_R;
		return ret;
	}
	//得到收费类别
	if(0==tCustomer.fee_type)
	{
		ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
			{
				tCustomer.fee_type=tCustomer.cut_type;
			}
			else
			{
				DB_t_cif_customer_free_lock_cur();
				return E_DB_SPEFEE_R;
			}
		}
		else
		{
			tCustomer.fee_type=tSpeFee.fee_type;
		}
		//更新客户表的收费类别字段
		ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				ret= E_CUSTOMER_NOT_EXIST;
			else
				ret= E_DB_CUSTOMER_U;
			return ret;
		}
	}
	DB_t_cif_customer_free_lock_cur();

//已经入账了
	if(tradeserial->serial_state == SERISTAT_DEBT)
		goto L_RET;

	IA->iCardNo=tCard.card_id;
	IA->iFeeType=tCustomer.fee_type;
	if(amtcmp(tradeserial->trade_fee, 0) <=0)
		return E_INPUT_AMT_NULL;
	IA->dArrInAmt[0]=tradeserial->trade_fee;
	IA->iMainDevId=tradeserial->maindevice_id;				//工作站标识
	IA->iDevId=tradeserial->device_id;						//设备ID
	IA->iSerialNo=tradeserial->serial_no;					//流水号
	IA->iTradeNo=tradeserial->serial_type;					//交易码
	strcpy(IA->sTxDate,tradeserial->operate_date);			//交易日期
	strcpy(IA->sTxTime,tradeserial->operate_time);			//交易时间
	strcpy(IA->sTxCollectDate,tradeserial->collect_date);		//采集日期
	strcpy(IA->sTxCollectTime,tradeserial->collect_time);		//采集时间
	strcpy(IA->sTxAccDate,tradeserial->enteract_date);		//记账日期
	strcpy(IA->sTxAccTime,tradeserial->enteract_time);		//记账时间
	strcpy(IA->sMdeOper,tradeserial->oper_code);			//操作员
	strcpy(IA->sChkOper,tradeserial->reserve_1);			//复核操作员

	IA->iUseCardFlag=USE_CARD_TYPE_ONLINE;		//联机交易
	IA->iTxCnt=tradeserial->trade_count;					//交易次数
	IA->dInCardBala=tradeserial->in_balance;				//入卡值
	IA->dOutCardBala=-1;							//出卡值

	//修改借方和贷方帐户余额,记会计分录帐
	ret=AccountProcess(IA);
	if(ret)
	{
		writelog(LOG_ERR,"AccountProcess ret[%d]",ret);
		return ret;
	}
	tradeserial->out_balance=IA->dOutCardBala;			//出卡值
	if(amtcmp(tradeserial->out_balance,0)<0)
	{
		return E_ENTER_ACCOUNT;
	}

	for(i=1;i<=IA->iOutTxTypeCnt;i++)
	{
		switch(IA->iArrOutTxType[i])
		{
			case TXTYPE_TOLL_DEPOSIT:
			case TXTYPE_TOLL_DEPOSIT_BILL:
			case TXTYPE_TOLL_DEPOSIT_FUNDBOOK:
			case TXTYPE_DEDUCT_DEPOSIT:
			case TXTYPE_RETURN_DEPOSIT:
				tradeserial->deposit_fee=IA->dArrOutAmt[i];
				break;
			case TXTYPE_PRE_TOLL_BOARD:
			case TXTYPE_PRE_TOLL_BOARD_BILL:
			case TXTYPE_BANK_PRE_TOLL_BOARD:
			case TXTYPE_PRE_TOLL_BOARD_FUNDBOOK:
			case TXTYPE_SUBSIDY_PRE_TOLL_BOARD_CASH:
			case TXTYPE_SUBSIDY_PRE_TOLL_BOARD_BILL:
			case TXTYPE_SUBSIDY_PRE_TOLL_BOARD_FUNDBOOK:
			case TXTYPE_TOLL_BOARD:
			case TXTYPE_DEDUCT_BOARD:
			case TXTYPE_RETURN_BOARD:
			case TXTYPE_RETURN_BOARD_BILL:
			case TXTYPE_RETURN_BOARD_FUNDBOOK:
				tradeserial->boardfee=IA->dArrOutAmt[i];
				break;
			case TXTYPE_TOLL_CHARGE:
			case TXTYPE_TOLL_CHARGE_BILL:
			case TXTYPE_TOLL_CHARGE_FUNDBOOK:
				tradeserial->in_fee=IA->dArrOutAmt[i];
				break;
			case TXTYPE_TOLL_CARDCOST:
			case TXTYPE_TOLL_CARDCOST_BILL:
			case TXTYPE_TOLL_CARDCOST_FUNDBOOK:
				tradeserial->cost_fee=IA->dArrOutAmt[i];
				break;
			default:
				break;
		}
		if(amtcmp(IA->dArrOutAmt[i],0)!=0)
		{
			sprintf(sMsg,"%s:%.2lf元 ",IA->sArrOutTxName[i],IA->dArrOutAmt[i]);
		}
	}
	tradeserial->serial_state=SERISTAT_DEBT;
	/*
	ret = DB_t_tif_tradeserial_update_lock_by_cur(&tradeserial);
	if(ret)
	{
		writelog(LOG_ERR,"db update t_tif_tradeserial error,errcode=[%d]",ret);
		return E_DB_TRADESERIAL_U;
	}
	*/
	
L_RET:
	out_pack->damt0=tradeserial->out_balance;	//出卡值
	out_pack->damt1=tradeserial->trade_fee;		//交易金额	
	out_pack->lvol0 = tradeserial->serial_no;		//流水号	
	sprintf(sMsg,"交易前卡余额:%.2lf元 卡当前余额:%.2lf元",tradeserial->in_balance,tradeserial->out_balance);
	strcat(out_pack->vsmess,sMsg);
	writelog(LOG_DEBUG,out_pack->vsmess);
	
	return 0;
}
Example #8
0
 int record_serial(ST_PACK *in_pack,T_t_tif_tradeserial *tradeserial,ST_PACK *out_pack){
	int ret =0;
	int card_id= 0;
	double dUniqno = 0;
	char logicdate[11]="";
	char sysdate[11]="";
	char systime[9]="";
	char	Operator[33+1] = "";
	int	maindevice_id = 0;

	T_t_pif_card tCard;
	card_id=in_pack->lvol0;

	memset(&tCard,0,sizeof(tCard));
	
	ret=get_datetime_from_db(sysdate,systime);
	if(ret)
	{
		writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret);
		getsysdate(sysdate);
		getsystime(systime);
		return ret;
	}
	ret=GetLogicDate(logicdate);								//业务日期
	if(ret)
	{
		writelog(LOG_ERR,"GetLogicDate error,errcode=[%d]",ret);
		return ret;
	}

	ret=DB_t_pif_card_read_by_card_id(card_id, &tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			ret=E_CARDNO_NOT_EXIST;
		else
			ret=E_DB_CARD_R;
		return ret;
	}

	if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0)
	{
		if('2'==tCard.state_id[CARDSTAT_TYPE_REG])
			ret= E_CARDNO_LOGOUT;
		else if('3'==tCard.state_id[CARDSTAT_TYPE_REG])
			ret = E_CARD_CHANGE;
		else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE)
			ret=E_CARDNO_LOST;
		else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE)
			ret=E_CARDNO_FREEZE;
		else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE)
			ret=E_CARDNO_WFAIL;
		return ret;
	}
	//	准备数据插入交易流水表
	ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dUniqno);  					//获得最大流水号
	if(ret)
	{
		writelog(LOG_ERR,"getNewUniqNo error,errcode=[%d]",ret);
		return ret;
	}						
	tradeserial->serial_no = D2I(dUniqno);			//流水号

	if(strlen(in_pack->scust_no) ==0)
		return E_INPUT_OPER_NULL;
	des2src(Operator,in_pack->scust_no);					//操作员号								//采集设备标识

	strncpy(tradeserial->operate_date,sysdate,sizeof(sysdate)-1);				//发生日期
	strncpy(tradeserial->operate_time,systime,sizeof(systime)-1);
	des2src(tradeserial->collect_date,tradeserial->operate_date);								//采集日期
	des2src(tradeserial->collect_time,tradeserial->operate_time);								//采集时间
	des2src(tradeserial->enteract_date,logicdate);							//处理日期
	des2src(tradeserial->enteract_time,tradeserial->operate_time);							//处理时间
	tradeserial->serial_no = D2I(dUniqno);									//流水号
	tradeserial->purse_id = PURSE_NO_ONE;					//钱包号
	tradeserial->serial_state = SERISTAT_NODEBT;								//流水状态
	tradeserial->maindevice_id = maindevice_id;						//上传工作站标识
	tradeserial->device_id = in_pack->lvol4;										//采集设备标识
	tradeserial->card_id = card_id;										//交易卡号
	tradeserial->customer_id=tCard.cosumer_id;								//客户号
	des2src(tradeserial->oper_code,Operator);
	tradeserial->trade_count=in_pack->lvol1+1;		//交易次数
	tradeserial->in_balance=in_pack->damt0;			//入卡值


	//除了海事的考试报名,别的交易金额不能小于0
	if(amtcmp(in_pack->damt1, 0) <= 0)
	{
		if(tradeserial->serial_type != 847233)
			return E_INPUT_AMT_NULL;
	}
	tradeserial->trade_fee=in_pack->damt1;				//交易金额
	strncpy(tradeserial->reserve_2,in_pack->vsmess,sizeof(tradeserial->reserve_2)-1);

	ret = DB_t_tif_tradeserial_add(tradeserial);
	if (ret)
	{
		writelog(LOG_ERR,"ret[%d]",ret);
		if(DB_REPEAT==ret)
			ret = E_DB_TRADESERIAL_E;
		else
			ret = E_DB_TRADESERIAL_I;
		return ret;
	}
	ret=db_commit();
	if(ret)
	{
		writelog(LOG_ERR,"db_commit error,errcode=[%d]",ret);
		return E_DB_COMMIT;
	}
	return 0;
	

}	
Example #9
0
static int packege_send_data(ST_PACK *in_pack,int flag,char *send_data){
	int ret =0;
	//char cellphone[31]="";	//充值手机号
	double money=0;			//充值金额
	char sysdate[11]="";
	char systime[9]="";
	char sysdatetime[20]="";
	char serialno[20]="";
	char sMoney[20]="";
	T_t_pif_card	tCard;
//	ext_phone_trans_t phone_trans_struct;
	ext_phone_trans_t* phone_trans_struct;
	phone_trans_struct=(ext_phone_trans_t*)send_data;
	
	memset(&tCard,0,sizeof(tCard));
	memset(phone_trans_struct,0,sizeof(ext_phone_trans_t));
	
	phone_trans_struct->prix[0]=0x31;
	memcpy(phone_trans_struct->length,"0067",4);
	if(1==flag)
	{
		memcpy(phone_trans_struct->type,"0100",4);
	}
	else if(2==flag)
	{
		memcpy(phone_trans_struct->type,"0200",4);		
	}
	//memcpy(phone_trans_struct->bitery,"0000000000000000",16);
	memset(phone_trans_struct->bitery,'0',sizeof(phone_trans_struct->bitery));
	ret=DB_t_pif_card_read_by_card_id(in_pack->lvol0, &tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			ret=E_CARDNO_NOT_EXIST;
		else
			ret=E_DB_CARD_R;
		return ret;
	}
	sprintf(phone_trans_struct->cutid,"%-22d",tCard.cosumer_id);	
	money = in_pack->damt1;
	int i_money=D2I(D4U5(money*100,0));
	sprintf(sMoney,"%07d",i_money);
	memcpy(phone_trans_struct->money,sMoney,sizeof(phone_trans_struct->money));
	ret=get_datetime_from_db(sysdate,systime);
	if(ret)
	{
		writelog(LOG_ERR,"get_datetime_from_db error,error code=[%d]",ret);
		getsysdate(sysdate);
		getsystime(systime);
	}
	strcpy(sysdatetime,sysdate+4);
	strcat(sysdatetime,systime);
	memcpy(phone_trans_struct->datetime,sysdatetime,10);
	memcpy(phone_trans_struct->tracenum,sysdate,8);
	sprintf(serialno,"%06d",in_pack->lvol6%1000000);
	memcpy(phone_trans_struct->tracenum+8,serialno,6);
	memcpy(phone_trans_struct->phone,in_pack->sphone,strlen(in_pack->sphone));
	memcpy(phone_trans_struct->retnum,"00",2);
	memset(phone_trans_struct->plugdata,0x20,sizeof(phone_trans_struct->plugdata));

	/*
	memcpy(send_data,phone_trans_struct->prix,1);
	memcpy(send_data+1,phone_trans_struct->length,4);
	memcpy(send_data+5,phone_trans_struct->type,4);
	memcpy(send_data+9,phone_trans_struct->bitery,16);
	memcpy(send_data+25,phone_trans_struct->cutid,22);
	memcpy(send_data+47,phone_trans_struct->money,7);
	memcpy(send_data+54,phone_trans_struct->datetime,10);
	memcpy(send_data+64,phone_trans_struct->tracenum,14);
	memcpy(send_data+78,phone_trans_struct->phone,11);
	memcpy(send_data+89,phone_trans_struct->retnum,2);
	memcpy(send_data+91,phone_trans_struct->plugdata,36);
	*/
	writelog(LOG_ERR,"package send data=[%s]",send_data);
	return 0;
	
}
Example #10
0
int F847110(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{

	int ret=0;
	int card_id=0;
	T_t_pif_card	tCard;
	T_t_pif_spefee 	tSpeFee;
	T_t_cif_customer  tCustomer;
	T_t_aif_account   tAccount;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	memset(&tCard,0,sizeof(tCard));
	memset(&tSpeFee,0,sizeof(tSpeFee));
	memset(&tCustomer,0,sizeof(tCustomer));
	memset(&tAccount,0,sizeof(tAccount));
	card_id = in_pack->lvol0;				//卡标识
	//判断卡状态是否为写卡未成功状态
	ret=DB_t_pif_card_read_by_card_id(card_id, &tCard);
	if(ret)
	{
		writelog(LOG_ERR,"card_id[%d]",card_id);
		if(DB_NOTFOUND==ret)
			*pRetCode= E_CARDNO_NOT_EXIST;
		else
			*pRetCode= E_DB_CARD_R;
		goto L_RETU;
	}
	if(card_id!=tCard.card_id)
	{
		writelog(LOG_ERR,"card_id[%d] db card_id[%d]",card_id,tCard.card_id);
		*pRetCode=E_DB_CARD_R;
		goto L_RETU;
	}
	if(strncmp(tCard.state_id,CARDSTAT_REG,4)!=0)
	{
		if(tCard.state_id[CARDSTAT_TYPE_REG]!=STATE_TRUE)
		{
			*pRetCode=E_CARDNO_LOGOUT;
			goto L_RETU;
		}
		else if(tCard.state_id[CARDSTAT_TYPE_LOST]==STATE_TRUE)
		{
			*pRetCode=E_CARDNO_LOST;
			goto L_RETU;
		}

		else if(tCard.state_id[CARDSTAT_TYPE_FREEZE]==STATE_TRUE)
		{
			*pRetCode=E_CARDNO_FREEZE;
			goto L_RETU;
		}
		//else if(tCard.state_id[CARDSTAT_TYPE_WFAIL]==STATE_TRUE)
			//*pRetCode=E_CARDNO_WFAIL;
	}
	//得到收费类别
	ret=DB_t_cif_customer_read_lock_by_cur_and_cut_id(tCard.cosumer_id, &tCustomer);
	if(ret)
	{
		writelog(LOG_ERR,"cut_id[%d]",tCard.cosumer_id);
		if(DB_NOTFOUND==ret)
			*pRetCode= E_CUSTOMER_NOT_EXIST;
		else
			*pRetCode= E_DB_CUSTOMER_R;
		goto L_RETU;
	}
	if(tCustomer.fee_type<1)
	{
		ret=DB_t_pif_spefee_read_by_dept_code_and_cut_type(tCustomer.classdept_no, tCustomer.cut_type,&tSpeFee);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
			{
				tCustomer.fee_type=tCustomer.cut_type;
			}
			else
			{
				DB_t_cif_customer_free_lock_cur();
				*pRetCode=E_DB_SPEFEE_R;
				goto L_RETU;
			}
		}
		else
		{
			tCustomer.fee_type=tSpeFee.fee_type;
		}
		//更新客户表的收费类别字段
		ret=DB_t_cif_customer_update_lock_by_cur(&tCustomer);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				*pRetCode= E_CUSTOMER_NOT_EXIST;
			else
				*pRetCode= E_DB_CUSTOMER_U;
			goto L_RETU;
		}
	}
	DB_t_cif_customer_free_lock_cur();

	ret=DB_t_aif_account_read_by_card_id_and_purse_id(card_id,0,&tAccount);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			*pRetCode= E_ACTNO_NOT_EXIST;
		else
			*pRetCode= E_DB_ACCOUNT_R;
		goto L_RETU;
	}

	SetCol(handle,0);
	SetCol(handle,F_DAMT0,F_LVOL1,F_LVOL5,F_SDATE0,F_LVOL0,F_SNAME,F_SNAME2,F_SCUST_AUTH,F_SSERIAL0,F_SCUST_AUTH2,F_SCUST_TYPE,F_SCUST_LIMIT,F_SCUST_NO,F_SBANK_ACC,0);
	out_pack->lvol0 = tCard.card_id;							//卡标识
	out_pack->damt0=D4U5(tAccount.cur_freebala,2);			//卡余额
	des2src(out_pack->sdate0,tCard.end_time);				//有效截止日期
	out_pack->lvol1 = tCustomer.cut_type;					//客户类别
	out_pack->lvol5 = tCustomer.fee_type;					//收费类别
	des2src(out_pack->sname,tCustomer.cut_name);			//学生\员工姓名
	des2src(out_pack->sserial0,tCustomer.classdept_no);		//单位代码
	des2src(out_pack->scust_auth2,tCustomer.man_id);		//身份证号
	des2src(out_pack->scust_type,tCustomer.sex);			//性别
	des2src(out_pack->scust_limit,tCustomer.stuemp_no);		//学号\员工号
	des2src(out_pack->sname2,tCustomer.lib_cardid);			//图书证号
	des2src(out_pack->scust_no,tCard.showid);				//显示卡号
	des2src(out_pack->sbank_acc,tCard.physical_no);			//物理卡号
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
L_RETU:
	return  -1;
}