Ejemplo n.º 1
0
int F847230(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	des2src(pAccTrans->trans.opercode,rPack->semp);
	pAccTrans->trans.transcode=TC_AUTHCARDUNLOSS;
	ret=pAccTrans->InitTrans();
	if(ret)
		return ret;			
	TRANS& trans=pAccTrans->trans;

	ST_CPACK aPack;
	ST_PACK *outPack = &(aPack.pack);
	memset(&aPack,0,sizeof(aPack));
	
	ResetNormalCPack(&aPack,0,1);

		
	SetCol(handle,0);
	SetCol(handle,F_LVOL0,F_SSERIAL0,0);

	trans.cardno= rPack->lvol0;
	if(trans.cardno<= 0)
	{
		return  E_INPUT_CARDNO;
	}	
	if(strlen(rPack->scust_limit) == 0)
	{
		return  E_INPUT_OPER_NULL;
	}
	T_t_authcard tAuthCard;
	memset(&tAuthCard,0,sizeof(tAuthCard));
	ret = DB_t_authcard_read_by_cardno(trans.cardno,&tAuthCard);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			return  E_NOTEXIST_AUTHCARD;
		else
			return  E_DB_AUTHCARD_R;
	}

	if(tAuthCard.status[0]==STATUS_DELETE)
	{
		writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno);
		return  E_AUTHCARD_LOGOUT;
	}
	if(tAuthCard.lossflag[0]=='0')
	{
		return E_AUTHCARD_NOLOST;
	}
	
	T_t_operator tOper;
	memset(&tOper,0,sizeof tOper);
	ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode);
			return  E_DB_OPERATOR_N;
		}
		else
			return  E_DB_OPERATOR_R;
	}
	sprintf(trans.remark,"操作员[%s]授权卡卡号[%d]解挂",tAuthCard.opercode,tAuthCard.cardno);
	if(tOper.status[0]==STATUS_DELETE)
	{
		writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode);
		return  E_OPERLOGON_UNREG;
	}

	ret=chk_oper_pwd(tAuthCard.opercode,rPack->semp_pwd);
	if(ret)
	{
		writelog(LOG_ERR,"operator password error, operator [%s]",tAuthCard.opercode);
		if(E_NOTEXIST_OPER==ret)
			return E_NOTEXIST_AUTHOPER;
		else if(E_OPERPWD==ret)
			return E_AUTH_OPER_PWD;
		else
			return ret;
	}
	tAuthCard.lossflag[0]='0';
	strcpy(tAuthCard.lossdate,"");
	ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard);
	if(ret)
	{
		writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno);
		return  E_DB_AUTHCARD_U;
	}
	// 插入黑名单表
	T_t_cardver cardver;
	memset(&cardver,0,sizeof(cardver));
	cardver.cardno=tAuthCard.cardno;
	des2src(cardver.accdate,pAccTrans->trans.accdate);
	cardver.termid=pAccTrans->trans.termid;
	cardver.termseqno=pAccTrans->trans.termseqno;
	cardver.cardno=tAuthCard.cardno;
	des2src(cardver.cardphyid,tAuthCard.cardphyid);
	cardver.cardvertype=CARDVERTYPE_CARDUNLOSS;
	cardver.adddelflag[0]=ADDDELFLAG_DEL;
	cardver.status[0]=STATUS_NORMAL;
	
	ret=getCardVerNo(cardver.cardverno);
	if(ret)
					return ret;
	ret=DB_t_cardver_add(&cardver);
	if(ret)
	{
		if(DB_REPEAT==ret)
			return E_DB_CARDVER_E;
		else
			return E_DB_CARDVER_I;
	}
	outPack->lvol0=tAuthCard.cardno;
	des2src(outPack->sserial0,cardver.cardverno);
	PutRow(handle,outPack,pRetCode,szMsg);
	return 0;
}
Ejemplo n.º 2
0
int F847228(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret;
	char sysdate[9] = "";
	char systime[7] = "";
	int auth_cardno = 0;
	T_t_authcard tAuthCard;
	T_t_operator tOper;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	double uni_no = 0.0;

	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	ret=pAccTrans->checkCfgUpdate();
	if(ret)
		return ret;
	pAccTrans->clear();
	GetCpackDataString(rPack,pAccTrans->cpackdata);
	pAccTrans->trans.transcode=TC_AUTHCARDUPD;
	ret=pAccTrans->addOperDtl(rPack->semp);
	if(ret)
		return ret;

	memset(&tAuthCard,0,sizeof tAuthCard);
	memset(&aPack,0,sizeof aPack);

	ResetNormalCPack(&aPack,0,1);

	auth_cardno = rPack->lvol0;
	if(auth_cardno <= 0)
	{
		*pRetCode = E_INPUT_CARDNO;
		goto L_RETU;
	}
	if(strlen(rPack->scust_limit) == 0)
	{
		*pRetCode = E_INPUT_OPER_NULL;
		goto L_RETU;
	}

	if(IsInvalidDateTime(rPack->sdate0,"YYYYMMDD"))
	{
		*pRetCode = E_INPUT_DATE;
		goto L_RETU;
	}
	
	ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			*pRetCode = E_AUTHCARD_NOT_EXISTS;
		else
			*pRetCode = E_DB_OPER_AUTHCARD_R;
		goto L_RETU;
	}

	if(tAuthCard.status[0] == STATUS_LOGOUT)
	{
		writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno);
		*pRetCode = E_AUTHCARD_HAS_CANCEL;
		goto L_RETU;
	}
	if(tAuthCard.cardstatus[CARDSTAT_TYPE_LOST]== '1')
	{
		writelog(LOG_ERR,"auth card is loss , card id [%d]",tAuthCard.cardno);
		*pRetCode = E_AUTHCARD_IS_LOSS;
		goto L_RETU;
	}

	memset(&tOper,0,sizeof tOper);
	ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode);
			*pRetCode = E_DB_OPERATOR_N;
		}
		else
			*pRetCode = E_DB_OPERATOR_R;
		goto L_RETU;
	}
	if(tOper.status[0]==STATUS_LOGOUT)
	{
		writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode);
		*pRetCode = E_OPERLOGON_UNREG;
		goto L_RETU;
	}
	des2src(tAuthCard.expiredate,rPack->sdate0);
	tAuthCard.privilege = rPack->lvol1;

	ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard);
	if(ret)
	{
		writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno);
		*pRetCode = E_DB_OPER_AUTHCARD_U;
		goto L_RETU;
	}
	SetCol(handle,0);
	SetCol(handle,F_LVOL0,F_LVOL1,F_SDATE0,F_SCUST_LIMIT,0);
	out_pack->lvol0 = tAuthCard.cardno;
	des2src(out_pack->sdate0,tAuthCard.expiredate);
	out_pack->lvol1 = tAuthCard.privilege;
	des2src(out_pack->scust_limit,tAuthCard.opercode);
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
L_RETU:
	return -1;		
}
Ejemplo n.º 3
0
int F950052(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret =0;
	//writelog(LOG_INFO,"start pos deposit");
	cpu_trade_t cpu_trade;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	ret=pAccTrans->CheckCfgUpdate();
	if(ret)
		return ret;
	T_t_authcard tAuthCard;
	T_t_transdtl transdtl;
	T_t_dpsoper   tDepositOper;
	T_t_dpsoperpos tDepositOperpos;
	T_t_dpsshoppos tDepositShoppos;
	T_t_shop 					tDepositShop;
	T_t_account	tAccount;		//帐户表
	T_t_device tDevice;

	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	memset(&tAuthCard,0,sizeof(tAuthCard));
	memset(&tDepositOper,0,sizeof(tDepositOper));
	memset(&tDepositOperpos,0,sizeof(tDepositOperpos));
	memset(&tDepositShoppos,0,sizeof(tDepositShoppos));
	memset(&tDepositShop,0,sizeof(tDepositShop));
	memset(&tAccount,0,sizeof(tAccount));
	memset(&transdtl,0,sizeof(transdtl));
	int opercardno=rPack->lvol3;			//操作员号
	if(!opercardno)
		return E_INPUTNULL_CARDNO;
	trans.cardflag=1;
	trans.usecardflag=1;	
	trans.cardno=rPack->lvol5;
	trans.purseno=PURSE_NO_ONE;
	trans.cardbefbal=rPack->lvol9/100.0;				//入卡金额
	trans.dpscnt= rPack->lvol7;					//入卡金额
	trans.inputamt= rPack->lvol8/100.0;			//充值金额	
	trans.unusedamt = trans.inputamt;
	trans.fundtype=1;
	transdtl.sysid= rPack->lcert_code;						//上传工作站标识(前置机注册号)
	des2src(transdtl.devphyid, rPack->sdate1);		//物理设备ID
	transdtl.devseqno=rPack->lvol4;					//上传端流水号
	ret=GetDevIdByDevPhyId(&(trans.termid),transdtl.devphyid);
	if (ret)
	{
		writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] devphy999_id[%s]",ret,transdtl.devphyid);
		return ret;
	}
	ret = DB_t_device_read_by_deviceid(trans.termid,&tDevice);
	if(ret)
	{
		writelog(LOG_ERR," DB_t_device_read_by_deviceid err[%d]",ret);
		return E_DB_DEVICE_R;
	}

	//writelog(LOG_DEBUG,"trans.inputamt[%d]",trans.inputamt);
	T_t_card tCard;
	memset(&tCard,0,sizeof(tCard));
	ret=doCard(trans,tCard);
	if(ret)
	{
		return ret;
	}
	memset(&cpu_trade,0,sizeof cpu_trade);
	des2src(cpu_trade.random_key,rPack->sstock_code);//fixme
	cpu_trade.tradeamt = rPack->lvol8;
	cpu_trade.balance = rPack->lvol9;
	cpu_trade.termsno = rPack->lvol4;
	sprintf(cpu_trade.termno,"%012d",tDevice.deviceno); // 终端号
	cpu_trade.tradecnt = trans.dpscnt;
	sprintf(cpu_trade.tx_datetime,"%s%s",rPack->spost_code,rPack->spost_code2);

	ret = doCheckMac(&cpu_trade,NULL,out_pack->sstock_code2);
	if(ret)
	{
		writelog(LOG_ERR,"doCheckMac err[%d]",ret);
		return ret;
	}

	trans.feetype=tCard.feetype;
	trans.cardtype=tCard.cardtype;
//	ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INC,0);
//	if(ret)
//		return ret;
	// 读取操作员号
	ret = DB_t_authcard_read_by_cardno(opercardno,&tAuthCard);
	if(ret)
	{
		writelog(LOG_ERR,"get operator code from auth card error, auth_card_id[%d]",opercardno);
		if(DB_NOTFOUND == ret)
			 return E_DB_AUTHCARD_N;
		else
			 return  E_DB_OPERATOR_R;
	}
	if(tAuthCard.status[0]!=STATUS_NORMAL)
	{
		return E_OPERLOGON_UNREG;
	}
	des2src(trans.opercode,tAuthCard.opercode);
		ret=DB_t_dpsoper_read_lock_by_c0_and_opercode(trans.opercode,&tDepositOper);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_DEPOSITOPER_R;
		else
			return E_DB_DEPOSITOPER_N;
	}
	if(tDepositOper.status[0]!=STATUS_NORMAL)
	{
		DB_t_dpsoper_free_lock_by_c0();
		return E_DEPOSITOPER_STOP;
	}
	//判断是否是重复交易
	if(tDepositOper.lastdevseqno==transdtl.devseqno)
	{
		DB_t_dpsoper_free_lock_by_c0();
		ret=DB_t_transdtl_read_by_accdate_and_devphyid_and_devseqno(
			trans.transdate,tDepositOper.lastdevphyid,tDepositOper.lastdevseqno,
			&transdtl);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				return E_DB_TRANSDTL_N;
			else
				return E_DB_TRANSDTL_R;
		}
		//if(transdtl.revflag[0]=='1')
		//	return E_TRANSDTL_REV;
		ResetNormalCPack(&aPack,0,1);
		SetCol(handle,0);
		SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0);

		out_pack->lvol5 = transdtl.cardno;
		out_pack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0);
		out_pack->lcert_code = transdtl.termseqno;
		writelog(LOG_INFO,"该交易已成功,卡号[%d]充值金额[%.2lf]卡余额[%.2lf]",transdtl.cardno,
				 transdtl.amount,transdtl.cardaftbal);
		PutRow(handle,out_pack,pRetCode,szMsg);
		return 0;		
	}
	if(strncmp(tDepositOper.lasttransdate,trans.transdate,8)!=0)
	{
		des2src(tDepositOper.lasttransdate,trans.transdate);
		tDepositOper.depositcnt=0;
		tDepositOper.depositamt=0;
	}
	tDepositOper.depositcnt++;
	tDepositOper.depositamt+=trans.inputamt;
	tDepositOper.lastdevseqno=transdtl.devseqno;
	des2src(tDepositOper.lastdevphyid,transdtl.devphyid);
	des2src(tDepositOper.lastsaved,trans.sysdatetime);
	if(amtcmp(tDepositOper.maxdepositamt,0)>0)
	{
		DB_t_dpsoper_free_lock_by_c0();
		if(amtcmp(tDepositOper.depositamt,tDepositOper.maxdepositamt)>0)
		{
			return E_OPER_OVER_MAX_DEPOSIT_AMT;
		}
	}
	ret=DB_t_dpsoper_update_lock_by_c0(&tDepositOper);
	if(ret)
	{
			return E_DB_DEPOSITOPER_U;
	}
	ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos);

	if(ret)
	{
		if(DB_NOTFOUND==ret)
		{
			writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid);
			trans.transcode = TC_POSDEPOSIT;
		}
		else
		{
			return E_DB_DEPOSITSHOPPOS_R;
		}
	}
	else
	{
		writelog(LOG_INFO,"ShopPosDeposit termid[%d] ",trans.termid);
		trans.transcode = TC_SHOPPOSDEPOSIT;
		ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tDepositShop);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				return E_DB_SHOP_N;
			else
				return E_DB_SHOP_R;
		}
		if(tDepositShop.status[0]!=STATUS_NORMAL)
		{
			return E_SHOP_LOGOUT;
		}
		des2src(trans.draccno,tDepositShop.accno);		
	}
	ret=pAccTrans->InitTrans();
	if(ret)
		return ret;
	//根据卡号和钱包号得到消费者账号(借方)
	ret=DB_t_account_read_by_accno(tCard.accno,&tAccount);
	if(ret)
	{
		writelog(LOG_ERR,"DB_t_account_read_by_accno ret[%d]cardno[%d]",ret,trans.cardno);
		if(DB_NOTFOUND==ret)
			return E_NOTEXIST_ACCNO;
		else
			return E_DB_ACCOUNT_R;
	}
	double CardMaxBal=0;
	ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal);
	if(ret)
		return ret;
	if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>=0)
		return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal);
	trans.custid=tCard.custid;
	des2src(trans.cardaccno,tAccount.accno);
	ret=pAccTrans->doTrans();
	if(ret)
		return ret;
	des2src(transdtl.transdate,trans.transdate);
	des2src(transdtl.transtime,trans.transtime);
	strcpy(transdtl.accdate,trans.accdate);
	strcpy(transdtl.acctime,trans.acctime);
	transdtl.termid=trans.termid;
	transdtl.termseqno=trans.termseqno;
	transdtl.transcode=trans.transcode;
	transdtl.paytype=trans.fundtype;
	des2src(transdtl.voucherno,trans.voucherno);
	transdtl.cardno=trans.cardno;
	transdtl.purseno=trans.purseno;
	transdtl.transflag = TF_DPS;
	transdtl.cardcnt=trans.dpscnt;
	transdtl.cardbefbal=trans.cardbefbal;
	transdtl.amount=trans.totaltransamt;
	transdtl.managefee=trans.totalfeeamt;
	transdtl.cardaftbal=trans.cardaftbal;
	transdtl.custid=trans.custid;
	des2src(transdtl.custname,tAccount.accname);
	des2src(transdtl.opercode,trans.opercode);
	transdtl.status[0]=DTLSTATUS_SUCCESS;
	ret=DB_t_transdtl_add(&transdtl);
	if(ret)
	{
		if(DB_REPEAT==ret)
			return E_DB_TRANSDTL_E;
		else
			return E_DB_TRANSDTL_I;
	} 	
	sprintf(trans.remark,"卡号%d 充值前卡余额:%.2lf元 卡当前余额:%.2lf元",trans.cardno,trans.cardbefbal,trans.cardaftbal);
	writelog(LOG_INFO,trans.remark);
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,F_SSTOCK_CODE2,0);

	out_pack->lvol5 = trans.cardno;
	out_pack->lvol10 = (int)D4U5(trans.cardaftbal*100,0);
	out_pack->lcert_code = trans.termseqno;
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
}
Ejemplo n.º 4
0
int F847229(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	des2src(pAccTrans->trans.opercode,rPack->semp);
	pAccTrans->trans.transcode=TC_AUTHCARDLOSS;
	ret=pAccTrans->InitTrans();
	if(ret)
		return ret;			
	TRANS& trans=pAccTrans->trans;
	int auth_cardno = 0;
	T_t_authcard tAuthCard;

	memset(&tAuthCard,0,sizeof tAuthCard);

	auth_cardno = rPack->lvol0;
	if(auth_cardno <= 0)
	{
		return E_INPUT_CARDNO;
	}

	
	if(strlen(rPack->scust_limit) == 0)
	{
		return E_INPUT_OPER_NULL;
	}
	
	ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			return E_NOTEXIST_AUTHCARD;
		else
			return E_DB_AUTHCARD_R;
	}
	sprintf(trans.remark,"操作员[%s]授权卡卡号[%d]挂失",tAuthCard.opercode,tAuthCard.cardno);

	if(tAuthCard.status[0]==STATUS_DELETE)
	{
		writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno);
		return E_AUTHCARD_LOGOUT;
	}
	if(tAuthCard.lossflag[0]=='1')
	{
		return E_AUTHCARD_IS_LOSS;
	}
	T_t_operator tOper;
	memset(&tOper,0,sizeof tOper);
	ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode);
			return E_DB_OPERATOR_N;
		}
		else
			return E_DB_OPERATOR_R;
	}
	if(tOper.status[0]==STATUS_DELETE)
	{
			writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode);
			return E_OPERLOGON_UNREG;
	}

	tAuthCard.lossflag[0]='1';
	getsysdate(tAuthCard.lossdate);
	ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard);
	if(ret)
	{
		writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno);
		return E_DB_AUTHCARD_U;
	}
	// 插入黑名单表
	T_t_cardver cardver;
	memset(&cardver,0,sizeof(cardver));
	cardver.cardno=tAuthCard.cardno;
	des2src(cardver.accdate,pAccTrans->trans.accdate);
	cardver.termid=pAccTrans->trans.termid;
	cardver.termseqno=pAccTrans->trans.termseqno;
	cardver.cardno=tAuthCard.cardno;
	des2src(cardver.cardphyid,tAuthCard.cardphyid);
	cardver.cardvertype=CARDVERTYPE_CARDLOSS;
    cardver.adddelflag=ADDDELFLAG_ADD;
	cardver.status[0]=STATUS_NORMAL;
	
	ret=getCardVerNo(cardver.cardverno);
	if(ret)
		return ret;
	ret=DB_t_cardver_add(&cardver);
	if(ret)
	{
		if(DB_REPEAT==ret)
			return E_DB_CARDVER_E;
		else
			return E_DB_CARDVER_I;
	}
	return 0;
}
Ejemplo n.º 5
0
int F847228(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	des2src(pAccTrans->trans.opercode,rPack->semp);
	pAccTrans->trans.transcode=TC_AUTHCARDUPD;
	ret=pAccTrans->InitTrans();
	if(ret)
		return ret;			
	TRANS& trans=pAccTrans->trans;
	int auth_cardno = 0;
	T_t_authcard tAuthCard;
	T_t_operator tOper;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	double uni_no = 0.0;
	memset(&tAuthCard,0,sizeof tAuthCard);
	memset(&aPack,0,sizeof aPack);

	ResetNormalCPack(&aPack,0,1);

	auth_cardno = rPack->lvol0;
	if(auth_cardno <= 0)
	{
		return E_INPUT_CARDNO;
	}
	if(strlen(rPack->scust_limit) == 0)
	{
		return E_INPUT_OPER_NULL;
	}

	if(IsInvalidDateTime(rPack->sdate0,"YYYYMMDD"))
	{
		return E_INPUT_DATE;
	}
	
	ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			return E_NOTEXIST_AUTHCARD;
		else
			return E_DB_AUTHCARD_R;
	}

	if(tAuthCard.status[0] == STATUS_DELETE)
	{
		writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno);
		return E_AUTHCARD_LOGOUT;
	}
	if(tAuthCard.lossflag[0]== '1')
	{
		writelog(LOG_ERR,"auth card is loss , card id [%d]",tAuthCard.cardno);
		return E_AUTHCARD_IS_LOSS;
	}

	memset(&tOper,0,sizeof tOper);
	ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode);
			return E_DB_OPERATOR_N;
		}
		else
			return E_DB_OPERATOR_R;
	}
	if(tOper.status[0]==STATUS_DELETE)
	{
		writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode);
		return E_OPERLOGON_UNREG;
	}
	des2src(tAuthCard.expiredate,rPack->sdate0);
	tAuthCard.privilege = rPack->lvol1;

	ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard);
	if(ret)
	{
		writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno);
		return E_DB_AUTHCARD_U;
	}
	SetCol(handle,0);
	SetCol(handle,F_LVOL0,F_LVOL1,F_SDATE0,F_SCUST_LIMIT,0);
	out_pack->lvol0 = tAuthCard.cardno;
	des2src(out_pack->sdate0,tAuthCard.expiredate);
	out_pack->lvol1 = tAuthCard.privilege;
	des2src(out_pack->scust_limit,tAuthCard.opercode);
	sprintf(trans.remark,"操作员[%s]授权卡卡号[%d]更新",tAuthCard.opercode,tAuthCard.cardno);
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
}
Ejemplo n.º 6
0
int F847229(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret;
	char sysdate[9] = "";
	char systime[7] = "";
	int auth_cardno = 0;
	T_t_authcard tAuthCard;
	T_t_operator tOper;


	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	ret=pAccTrans->checkCfgUpdate();
	if(ret)
		return ret;
	pAccTrans->clear();
	GetCpackDataString(rPack,pAccTrans->cpackdata);
	pAccTrans->trans.transcode=TC_AUTHCARDLOSS;
	ret=pAccTrans->addOperDtl(rPack->semp);
	if(ret)
		return ret;
	memset(&tAuthCard,0,sizeof tAuthCard);

	auth_cardno = rPack->lvol0;
	if(auth_cardno <= 0)
	{
		*pRetCode = E_INPUT_CARDNO;
		goto L_RETU;
	}

	
	if(strlen(rPack->scust_limit) == 0)
	{
		*pRetCode = E_INPUT_OPER_NULL;
		goto L_RETU;
	}
	
	ret = DB_t_authcard_read_by_cardno(auth_cardno,&tAuthCard);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			*pRetCode = E_AUTHCARD_NOT_EXISTS;
		else
			*pRetCode = E_DB_OPER_AUTHCARD_R;
		goto L_RETU;
	}

	if(tAuthCard.status[0]==STATUS_LOGOUT)
	{
		writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.cardno);
		*pRetCode = E_AUTHCARD_HAS_CANCEL;
		goto L_RETU;
	}
	
	memset(&tOper,0,sizeof tOper);
	ret = DB_t_operator_read_by_opercode(tAuthCard.opercode,&tOper);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
		{
			writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.opercode);
			*pRetCode = E_DB_OPERATOR_N;
		}
		else
			*pRetCode = E_DB_OPERATOR_R;
		goto L_RETU;
	}
	if(tOper.status[0]==STATUS_LOGOUT)
	{
		writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.opercode);
		*pRetCode = E_OPERLOGON_UNREG;
		goto L_RETU;
	}

	tAuthCard.cardstatus[CARDSTAT_TYPE_LOST]='1';
	getsysdate(tAuthCard.lossdate);
	ret = DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard);
	if(ret)
	{
		writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.cardno);
		*pRetCode = E_DB_OPER_AUTHCARD_U;
		goto L_RETU;
	}
	// 插入黑名单表
	ret = InsertToBlkList(auth_cardno,ADD_BLACKLIST);
	if(ret)
	{
		writelog(LOG_ERR,"insert into black list error, card id[%d]",auth_cardno);
		*pRetCode = ret;
		goto L_RETU;
	}	
	// 生成流水
	return 0;
L_RETU:
	return -1;		
}
Ejemplo n.º 7
0
int F849005(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret;
	int device_id=0;
	char sDevPhyid[31]="";
	char current_date[9] = "";

	CAccTrans& ats=CAccTrans::GetInst();
	TRANS& trans=ats.trans;
	ret=ats.CheckCfgUpdate();
	if(ret)
		return ret;
	
	T_t_authcard auth_card;

	memset(&auth_card,0,sizeof auth_card);
	writelog(LOG_INFO,"充值操作员签到,操作员卡号%d,设备%s",rPack->lvol5,rPack->sphone3);
	ret = DB_t_authcard_read_by_cardno(rPack->lvol5,&auth_card);
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			return E_DB_AUTHCARD_N;
		else
		 	return E_DB_AUTHCARD_R;
	}
	if(auth_card.status[0]!=STATUS_NORMAL)
		return E_AUTHCARD_LOGOUT;
	if(auth_card.lossflag[0] == '1')
	{
		return E_AUTHCARD_IS_LOSS;
	}
	// 判断授权卡权限
//	if((auth_card.privilege & AUTHCARD_PRV_ADDPOS) == 0)
//	{
//		*pRetCode = E_AUTHCARD_IS_LOSS;
//		goto L_RETU;
//	}
	// 判断有效期
	if(strcmp(auth_card.expiredate,trans.accdate) < 0)
	{
		return E_CARD_EXPIRED;
	}
	T_t_operator oper;
	memset(&oper,0,sizeof oper);
	ret = DB_t_operator_read_by_opercode(auth_card.opercode,&oper);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_NOTEXIST_OPER;
		else
			return E_DB_OPERATOR_R;
	}
	T_t_dpsoper   tDepositOper;
	memset(&tDepositOper,0,sizeof tDepositOper);
	ret=DB_t_dpsoper_read_by_opercode(auth_card.opercode,&tDepositOper);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_DEPOSITOPER_R;
		else
			return E_DB_DEPOSITOPER_N;
	}
	if(tDepositOper.status[0]!=STATUS_NORMAL)
	{
		return E_DEPOSITOPER_STOP;
	}
	ret=GetDevIdByDevPhyId(&device_id,rPack->sphone3);
	if (ret)
	{
		writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] device_id[%d]devphyid[%s]",ret,device_id,rPack->sphone3);
		return ret;
	}
	T_t_dpsshoppos tDepositShoppos;
	if('1'==tDepositOper.shopoperflag[0])
	{
		memset(&tDepositShoppos,0,sizeof(tDepositShoppos));
		ret=DB_t_dpsshoppos_read_by_deviceid(device_id, &tDepositShoppos);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
			{
				writelog(LOG_INFO,"PosDeposit device_id[%d] ",device_id);
				return E_DB_DEPOSITSHOPPOS_N;
			}
			else
			{
				return E_DB_DEPOSITSHOPPOS_R;
			}
		}
		T_t_shop	tShop;
		memset(&tShop,0,sizeof(tShop));
		ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tShop);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				return ERRINFO(E_NOTEXIST_SHOPID,tDepositShoppos.shopid);
			else
				return E_DB_SHOP_R;
		}
		if(tShop.status[0]!=STATUS_NORMAL)
		{
			return ERRINFO(E_SHOP_LOGOUT,tDepositShoppos.shopid);
		}
	}	
	else
	{
		memset(&tDepositShoppos,0,sizeof(tDepositShoppos));
		ret=DB_t_dpsshoppos_read_by_deviceid(device_id, &tDepositShoppos);
		if(ret)
		{
			if(DB_NOTFOUND!=ret)
			{
				writelog(LOG_ERR,"PosDeposit termid[%d] ",device_id);
				return E_DB_DEPOSITSHOPPOS_R;
			}
		}
		else
		{
			ERRTIP("设备号[%d]属于属于充值商户,非充值商户操作员不能使用该设备");
			return E_COMMON_ERR;
		}
	}
	if(tDepositOper.devlimitflag[0]=='1')
	{
		T_t_dpsoperpos tDepositOperpos;
		memset(&tDepositOperpos,0,sizeof tDepositOperpos);
		ret=DB_t_dpsoperpos_read_by_opercode_and_deviceid(tDepositOper.opercode, device_id,&tDepositOperpos);
		if(ret)
		{
			writelog(LOG_ERR,"DB_t_dpsoperpos_read_by_opercode_and_deviceid ret[%d]oper_code[%s] device_id[%d]devphy999_id[%s]",ret,tDepositOper.opercode, device_id,sDevPhyid);
			if(DB_NOTFOUND==ret)
				return E_OPER_NO_RIGHT_FOR_DEVICE;
			else
				return E_DB_DEPOSITOPERPOS_R;
		}
	}	
	return 0;
Ejemplo n.º 8
0
int F849003(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret =0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	ret=pAccTrans->CheckCfgUpdate();
	if(ret)
		return ret;
	T_t_authcard 	tAuthCard;
	T_t_transdtl 	transdtl;
	T_t_dpsoper   	tDepositOper;
	T_t_dpsoperpos 	tDepositOperpos;
	T_t_dpsshoppos 	tDepositShoppos;
	T_t_shop 		tDepositShop;
	T_t_account	tAccount;		//帐户表

	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	memset(&tAuthCard,0,sizeof(tAuthCard));
	memset(&tDepositOper,0,sizeof(tDepositOper));
	memset(&tDepositOperpos,0,sizeof(tDepositOperpos));
	memset(&tDepositShoppos,0,sizeof(tDepositShoppos));
	memset(&tDepositShop,0,sizeof(tDepositShop));
	memset(&tAccount,0,sizeof(tAccount));
	memset(&transdtl,0,sizeof(transdtl));
	int opercardno=rPack->lvol3;			//操作员号
	if(!opercardno)
		return E_INPUTNULL_CARDNO;
	trans.cardflag=1;
	trans.usecardflag=1;	
	trans.cardno=rPack->lvol5;
	trans.purseno=PURSE_NO_ONE;
	trans.cardbefbal=rPack->lvol9/100.0;			//入卡金额
	trans.cardaftbal=trans.cardbefbal;				
	trans.dpscnt= rPack->lvol7;					//入卡金额
	trans.inputamt= rPack->lvol8/100.0;			//充值金额	
	trans.unusedamt = trans.inputamt;
	trans.fundtype=1;

	ret=IsWaterExceptCard(trans.cardno);
	if(ret)
	{
		ERRTIP("卡号[%d]水控余额异常,充值功能暂停使用,请联系一卡通管理中心处理!!!",trans.cardno);
		return	ERRIF_CARDACC_EXCEPT;
	}
	
	T_t_card tCard;
	memset(&tCard,0,sizeof(tCard));
	ret=doCard(trans,tCard);
	if(ret)
	{
		return ret;
	}
	trans.feetype=tCard.feetype;
	trans.cardtype=tCard.cardtype;
//	ret=UpdateCardBitmap(trans.cardno,trans.cardcnt,CARDBITMAPTYPE_INC,0);
//	if(ret)
//		return ret;
	transdtl.sysid= rPack->lcert_code;						//上传工作站标识(前置机注册号)
	des2src(transdtl.devphyid, rPack->sphone3);		//物理设备ID
	transdtl.devseqno=rPack->lvol4;					//上传端流水号
	// 读取操作员号
	ret = DB_t_authcard_read_by_cardno(opercardno,&tAuthCard);
	if(ret)
	{
		writelog(LOG_ERR,"get operator code from auth card error, auth_card_id[%d]",opercardno);
		if(DB_NOTFOUND == ret)
			 return E_DB_AUTHCARD_N;
		else
			 return  E_DB_OPERATOR_R;
	}
	if(tAuthCard.status[0]!=STATUS_NORMAL)
	{
		return E_OPERLOGON_UNREG;
	}
	des2src(trans.opercode,tAuthCard.opercode);
	ret=GetDevIdByDevPhyId(&(trans.termid),transdtl.devphyid);
	if (ret)
	{
		writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] devphy999_id[%s]",ret,transdtl.devphyid);
		return ret;
	}
	ret=DB_t_dpsoper_read_lock_by_c0_and_opercode(trans.opercode,&tDepositOper);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_DEPOSITOPER_R;
		else
			return E_DB_DEPOSITOPER_N;
	}
	if(tDepositOper.status[0]!=STATUS_NORMAL)
	{
		DB_t_dpsoper_free_lock_by_c0();
		return E_DEPOSITOPER_STOP;
	}
	//判断是否是重复交易
	if(tDepositOper.lastdevseqno==transdtl.devseqno)
	{
		DB_t_dpsoper_free_lock_by_c0();
		ret=DB_t_transdtl_read_by_accdate_and_termid_and_devseqno(trans.accdate,trans.termid,tDepositOper.lastdevseqno,&transdtl);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				return E_DB_TRANSDTL_N;
			else
				return E_DB_TRANSDTL_R;
		}
		//if(transdtl.revflag[0]=='1')
		//	return E_TRANSDTL_REV;
		ResetNormalCPack(&aPack,0,1);
		SetCol(handle,0);
		SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0);

		out_pack->lvol5 = transdtl.cardno;
		out_pack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0);
		out_pack->lcert_code = transdtl.termseqno;
		writelog(LOG_INFO,"该交易已成功,卡号[%d]充值金额[%.2lf]卡余额[%.2lf]",transdtl.cardno,transdtl.amount,transdtl.cardaftbal);
		PutRow(handle,out_pack,pRetCode,szMsg);
		return 0;		
	}
	if(strncmp(tDepositOper.lasttransdate,trans.transdate,8)!=0)
	{
		des2src(tDepositOper.lasttransdate,trans.transdate);
		tDepositOper.depositcnt=0;
		tDepositOper.depositamt=0;
	}
	tDepositOper.depositcnt++;
	tDepositOper.depositamt+=trans.inputamt;
	tDepositOper.lastdevseqno=transdtl.devseqno;
	des2src(tDepositOper.lastdevphyid,transdtl.devphyid);
	des2src(tDepositOper.lastsaved,trans.sysdatetime);
	if(amtcmp(tDepositOper.maxdepositamt,0)>0)
	{
		DB_t_dpsoper_free_lock_by_c0();
		if(amtcmp(tDepositOper.depositamt,tDepositOper.maxdepositamt)>0)
		{
			return E_OPER_OVER_MAX_DEPOSIT_AMT;
		}
	}
	ret=DB_t_dpsoper_update_lock_by_c0(&tDepositOper);
	if(ret)
	{
			return E_DB_DEPOSITOPER_U;
	}
	if('1'==tDepositOper.shopoperflag[0])
	{
		ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos);

		if(ret)
		{
			if(DB_NOTFOUND==ret)
			{
				writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid);
				return E_DB_DEPOSITSHOPPOS_N;
			}
			else
			{
				return E_DB_DEPOSITSHOPPOS_R;
			}
		}
		ret=DB_t_shop_read_by_shopid(tDepositShoppos.shopid, &tDepositShop);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
				return ERRINFO(E_NOTEXIST_SHOPID,tDepositShoppos.shopid);
			else
				return E_DB_SHOP_R;
		}
		if(tDepositShop.status[0]!=STATUS_NORMAL)
		{
			return ERRINFO(E_SHOP_LOGOUT,tDepositShop.shopid);
		}
		trans.transcode = TC_SHOPPOSDEPOSIT;
		des2src(trans.shopaccno,tDepositShop.accno);		
		writelog(LOG_INFO,"充值商户充值");
	}
	else
	{
		ret=DB_t_dpsshoppos_read_by_deviceid(trans.termid, &tDepositShoppos);

		if(ret)
		{
			if(DB_NOTFOUND!=ret)
			{
				writelog(LOG_INFO,"PosDeposit termid[%d] ",trans.termid);
				return E_DB_DEPOSITSHOPPOS_R;
			}
		}
		else
		{
			ERRTIP("设备号[%d]属于属于充值商户,非充值商户操作员不能使用该设备",trans.termid);
			return E_COMMON_ERR;

		}
		trans.transcode = TC_POSDEPOSIT;
	}
	ret=pAccTrans->InitTrans();
	if(ret)
		return ret;
	//根据卡号和钱包号得到消费者账号(借方)
	ret=DB_t_account_read_by_accno(tCard.accno,&tAccount);
	if(ret)
	{
		writelog(LOG_ERR,"DB_t_account_read_by_accno ret[%d]cardno[%d]accno[%s]",ret,trans.cardno,tCard.accno);
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_ACCNO,tCard.accno);
		else
			return E_DB_ACCOUNT_R;
	}
	if(tAccount.lastdpscnt>trans.dpscnt)
	{
		return ERRINFO(E_CARDCNT_LT_LASTCARDCNT,trans.dpscnt,tAccount.lastdpscnt);
	}
//	double CardMaxBal=0;
//	ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal);
//	if(ret)
//		return ret;
//	if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0)
//		return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal);
	trans.custid=tCard.custid;
	des2src(trans.cardaccno,tAccount.accno);
	ret=pAccTrans->doTrans();
	if(ret)
		return ret;
	des2src(transdtl.transdate,trans.transdate);
	des2src(transdtl.transtime,trans.transtime);
	strcpy(transdtl.accdate,trans.accdate);
	strcpy(transdtl.acctime,trans.acctime);
	transdtl.termid=trans.termid;
	transdtl.termseqno=trans.termseqno;
	transdtl.transcode=trans.transcode;
	transdtl.paytype=trans.fundtype;
	des2src(transdtl.voucherno,trans.voucherno);
	transdtl.cardno=trans.cardno;
	transdtl.purseno=trans.purseno;
	transdtl.transflag=TF_DPS;
	transdtl.cardcnt=trans.dpscnt;
	transdtl.cardbefbal=trans.cardbefbal;
	transdtl.amount=trans.totaltransamt;
	transdtl.managefee=trans.totalfeeamt;
	transdtl.cardaftbal=trans.cardaftbal;
	transdtl.custid=trans.custid;
    transdtl.showcardno=atol(tCard.showcardno);
	des2src(transdtl.custname,tAccount.accname);
	des2src(transdtl.opercode,trans.opercode);
	GetStuempnoByCustid(transdtl.custid,transdtl.stuempno);	
	transdtl.status[0]=DTLSTATUS_SUCCESS;
	ret=DB_t_transdtl_add(&transdtl);
	if(ret)
	{
		if(DB_REPEAT==ret)
			return E_DB_TRANSDTL_E;
		else
			return E_DB_TRANSDTL_I;
	} 	
	sprintf(trans.remark,"卡号%d 充值前卡余额:%.2lf元 卡当前余额:%.2lf元",trans.cardno,trans.cardbefbal,trans.cardaftbal);
	writelog(LOG_INFO,trans.remark);
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0);

	out_pack->lvol5 = trans.cardno;
	out_pack->lvol10 = (int)D4U5(trans.cardaftbal*100,0);
	out_pack->lcert_code = trans.termseqno;
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
}