コード例 #1
0
ファイル: F850005.cpp プロジェクト: nykma/ykt4sungard
//写卡异常处理
static int WriteCardExcept(ST_PACK *rPack)
{
	int ret=0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	des2src(trans.refno,rPack->sphone3);		//交易参考号
	if(strlen(trans.refno)!=14)
	{
		 ERRTIP("交易参考号错误");
		 return E_COMMON_ERR;
	}
	T_t_refno tRefno;
	memset(&tRefno,0,sizeof(tRefno));

	ret=DB_t_refno_read_by_refno(trans.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_REFNO_N;
		else
			return E_DB_REFNO_R;
	}
	if(strncmp(tRefno.mac,rPack->saddr,8)!=0)
	{
		ERRTIP("交易参考号MAC校验错误");
		return E_COMMON_ERR;
	}
	T_t_transdtl transdtl;

	memset(&transdtl,0,sizeof(transdtl));

	ret=DB_t_transdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_TRANSDTL_N;
		else
			return E_DB_TRANSDTL_U;
	}
	if(transdtl.status[0]!=DTLSTATUS_SUCCESS)
		transdtl.status[0]=DTLSTATUS_FAIL;
	transdtl.errcode = 2;
	strcpy(transdtl.remark,"中途拔卡,写卡失败");
	ret=DB_t_transdtl_update_lock_by_c0(&transdtl);
	if(ret)
	{
		return E_DB_TRANSDTL_U;
	}
	return 0;
}
コード例 #2
0
ファイル: F846341.cpp プロジェクト: nykma/ykt4sungard
int F846341(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	des2src(trans.refno,rPack->sphone3);

	if(strlen(trans.refno)!=14)
	{
		 ERRTIP("交易参考号错误");
		 return E_COMMON_ERR;
	}
	T_t_refno tRefno;

	memset(&tRefno,0,sizeof(tRefno));

	ret=DB_t_refno_read_by_refno(trans.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_REFNO_N;
		else
			return E_DB_REFNO_R;
	}
	if(strncmp(tRefno.mac,rPack->saddr,8)!=0)
	{
		return E_MAC_FAIL;
	}
	
	if(RS_SUCC!=tRefno.status)
	{
		return ERRIF_TRANS_REVERSED;
	}
	
	pAccTrans->trans.transcode=TC_TRANSREV;
	pAccTrans->trans.termid=tRefno.termid;
	ret=pAccTrans->InitTrans();
	if(ret)
		return ret;			

	ret=doTransRev(tRefno.accdate,tRefno.termid,tRefno.termseqno);
	if(ret)
	{
		writelog(LOG_ERR,"acctransrev err ret=%d",ret);
		return ret;
	}

	ST_CPACK aPack;
	ST_PACK *outPack = &(aPack.pack);
	ResetNormalCPack(&aPack,0,1);
		
	SetCol(handle,F_LVOL0,F_SPHONE3,F_SADDR,F_LWITHDRAW_FLAG,F_SDATE3,F_STIME3,F_SEMP,F_LSERIAL1,F_VSMESS,0);	
	outPack->lvol0=pAccTrans->trans.cardno;
	des2src(outPack->sdate3,pAccTrans->trans.accdate);
	des2src(outPack->stime3,pAccTrans->trans.acctime);
	des2src(outPack->semp,pAccTrans->trans.opercode);
	outPack->lserial1=pAccTrans->trans.termseqno;
	strcpy(outPack->sphone3,tRefno.refno);
	strcpy(outPack->saddr,tRefno.mac);
	strcpy(outPack->vsmess,pAccTrans->remark.c_str());
	PutRow(handle,outPack,pRetCode,szMsg);
	return 0;
}
コード例 #3
0
ファイル: F850005.cpp プロジェクト: nykma/ykt4sungard
static int ConfirmTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
    CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
    T_t_transdtl dtl;
    int ret;
    ST_CPACK aPack;
    ST_PACK *out_pack=&(aPack.pack);

    memset(&dtl,0,sizeof dtl);
    T_t_refno tRefno;
	memset(&tRefno,0,sizeof(tRefno));
	ret=DB_t_refno_read_by_refno(rPack->sphone3,&tRefno);
    writelog(LOG_DEBUG,"confirm refno[%s]",rPack->sphone3);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return 0;
		else
			return E_DB_REFNO_R;
	}
	if(RS_SUCC==tRefno.status)
	{
		TIPINFO("交易已确认");
		return 0;
	}
    tRefno.status=RS_SUCC;
	strcpy(tRefno.lastsaved,trans.sysdatetime);
	ret=DB_t_refno_update_by_refno(tRefno.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_REFNO_N;
		else
			return E_DB_REFNO_U;
	}
    
    ret = DB_t_transdtl_read_lock_by_c0_and_accdate_and_termid_and_termseqno(
        tRefno.accdate,tRefno.termid,tRefno.termseqno,&dtl);
    if(ret)
    {
        if(DB_NOTFOUND == ret)
            return E_DB_TRANSDTL_N;
        return E_DB_TRANSDTL_R;
    }
    dtl.errcode = rPack->lvol0;
    des2src(dtl.remark,rPack->vsmess);
    des2src(dtl.voucherno,rPack->sphone2);
    writelog(LOG_ERR,"begin DB_t_transdtl_update_lock_by_c0");
    ret = DB_t_transdtl_update_lock_by_c0(&dtl);
    if(ret)
    {
        writelog(LOG_ERR,"更新流水表失败,ret[%d]",ret);
        return E_DB_TRANSDTL_U;
    }
    writelog(LOG_ERR,"end DB_t_transdtl_update_lock_by_c0");
    
    
    ResetNormalCPack(&aPack,0,1);
    SetCol(handle,0);
    SetCol(handle,F_LVOL0,F_LVOL5,F_DAMT0,F_DAMT1,F_DAMT2,F_SNAME2,F_SDATE1,0);
    out_pack->lvol0 = dtl.termseqno;
    out_pack->damt0 = dtl.cardaftbal;
    out_pack->damt1 = dtl.amount;
    out_pack->damt2 = dtl.cardbefbal;
    out_pack->lvol5 = D2I(dtl.cardaftbal * 100.0);
    des2src(out_pack->sname2,dtl.refno);
    des2src(out_pack->sdate1,dtl.accdate);
    PutRow(handle,out_pack,pRetCode,szMsg);
    return 0;
}
コード例 #4
0
ファイル: F850005.cpp プロジェクト: nykma/ykt4sungard
static int NormalTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	ST_CPACK aPack;
	ST_PACK *outPack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL8,F_LVOL10,F_LVOL11,F_LVOL12,F_SDATE0,F_SPHONE3,F_SADDR,F_LSAFE_LEVEL2,
		F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0);

	des2src(trans.refno,rPack->sphone3);		//交易参考号
	if(strlen(trans.refno)!=14)
	{
		 ERRTIP("交易参考号错误");
		 return E_COMMON_ERR;
	}
	T_t_refno tRefno;
	memset(&tRefno,0,sizeof(tRefno));

	ret=DB_t_refno_read_by_refno(trans.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_REFNO_N;
		else
			return E_DB_REFNO_R;
	}
	if(strncmp(tRefno.mac,rPack->saddr,8)!=0)
	{
		ERRTIP("交易参考号MAC校验错误");
		return E_COMMON_ERR;
	}
	if(RS_FAIL==tRefno.status)
	{
		ERRTIP("交易已失败");
		return E_COMMON_ERR;
	}
	T_t_transdtl transdtl;	
	memset(&transdtl,0,sizeof(transdtl));
	ret=DB_t_transdtl_read_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_NOTEXIST_TRANSDTL;
		else
			return E_DB_TRANSDTL_R;
	}
	int waterflag=0;
	if(transdtl.exttype/1000==1)//水控
		waterflag=1;
	if(RS_SUCC==tRefno.status)
	{
		outPack->lvol0=transdtl.cardno;
		outPack->lvol1=D4U5(transdtl.amount*100,0);
		outPack->lvol8=D4U5(transdtl.cardaftbal*100,0);
		if(waterflag)//水控
		{
			double wateraftbal= atof(transdtl.extdata);
			outPack->lsafe_level2=D4U5(wateraftbal*100,0);
		}
		des2src(outPack->sdate3,transdtl.transdate);
		des2src(outPack->stime3,transdtl.transtime);
		des2src(outPack->semp,transdtl.opercode);
		outPack->lwithdraw_flag=transdtl.termid;
		outPack->lserial1=transdtl.termseqno;
		des2src(outPack->sphone3,transdtl.refno);	
		des2src(outPack->saddr,tRefno.mac);
		PutRow(handle,outPack,pRetCode,szMsg);
		return 0;
	}
	if(transdtl.status[0]!=DTLSTATUS_INIT)
	{
		ERRTIP("交易流水表状态错误");
		return E_COMMON_ERR;
	}
	des2src(trans.opercode,transdtl.opercode);
	trans.termid=transdtl.termid;
	trans.termseqno=transdtl.termseqno;
	trans.cardflag=1;
	trans.usecardflag=1;	
	trans.transcode=transdtl.transcode;
	trans.cardno=transdtl.cardno;	
	trans.purseno=transdtl.purseno;
	trans.paycnt=transdtl.cardcnt;
	trans.cardbefbal=transdtl.cardbefbal;
	trans.cardaftbal=transdtl.cardbefbal;
	trans.inputamt= transdtl.amount;	
	trans.unusedamt = trans.inputamt;

	CPaymentBase *payment;
	payment = CPaymentBase::find_payment(transdtl.exttype);
	if(NULL == payment)
	{
		return E_TRANS_FUNC_NONSUPPORT;
	}
	rPack->lcert_code = transdtl.exttype;
	strcpy(rPack->sbank_acc,transdtl.extdata);
	ret = payment->init(handle,&aPack,rPack);
	if(ret)
	{
		writelog(LOG_ERR,"trade[%d],ret[%d]",transdtl.exttype,ret);		
		return	ret;
	}
	pAccTrans->SetSummary(payment->payment_.summary);
	
	T_t_card tCard;

	memset(&tCard,0,sizeof(tCard));

	ret=DB_t_card_read_by_cardno(trans.cardno,&tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno);
		else
			return E_DB_CARD_R;
	}
	strcpy(trans.cardaccno,tCard.accno);
	trans.feetype=tCard.feetype;
	trans.custid=tCard.custid;
	
	ret=pAccTrans->doTrans();
	if(ret)
		return ret;
	ret=pAccTrans->doTransEnd();
	if(ret)
		return ret;	
	ret=UpdateCardBitmap(trans.cardno,trans.paycnt,CARDBITMAPTYPE_SYS_ONLINE);
	if(ret)
		return ret;
	transdtl.status[0]=DTLSTATUS_SUCCESS;
	ret=DB_t_transdtl_update_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_TRANSDTL_N;
		else
			return E_DB_TRANSDTL_U;
	}
	tRefno.status=RS_SUCC;
	strcpy(tRefno.lastsaved,trans.sysdatetime);
	ret=DB_t_refno_update_by_refno(tRefno.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_REFNO_N;
		else
			return E_DB_REFNO_U;
	}
	outPack->lvol0=tCard.cardno;
	outPack->lvol1=D4U5(trans.inputamt*100,0);
	outPack->lvol8=D4U5(trans.cardaftbal*100,0);
	if(waterflag)//水控
	{
		double wateraftbal= atof(transdtl.extdata);
		outPack->lsafe_level2=D4U5(wateraftbal*100,0);
	}
	des2src(outPack->sdate3,trans.accdate);
	des2src(outPack->stime3,trans.acctime);
	des2src(outPack->semp,trans.opercode);
	outPack->lwithdraw_flag=trans.termid;
	outPack->lserial1=trans.termseqno;
	des2src(outPack->sphone3,trans.refno);
	des2src(outPack->saddr,tRefno.mac);
	sprintf(trans.remark,"%s卡余额%.2lf元",pAccTrans->remark.c_str(),pAccTrans->trans.cardaftbal);
	des2src(outPack->vsmess,trans.remark);
//	AnswerData(handle,*pRetCode,szMsg);
	//进行第三方支付
	if(payment->payment_.onlinepay)
	{
		ret=db_commit();
		if(ret)
		{
			writelog(LOG_ERR,"数据库事务提交失败 ret=%d",ret);
			return E_DB_COMMIT;
		}
		rPack->lwithdraw_flag=outPack->lwithdraw_flag;
		rPack->lserial1=outPack->lserial1;
		rPack->lvol0=outPack->lvol0;
		rPack->lvol1=outPack->lvol1;
		rPack->lvol8=outPack->lvol8;
		rPack->lsafe_level2=outPack->lsafe_level2;
		des2src(rPack->sdate3,outPack->sdate3);
		des2src(rPack->stime3,outPack->stime3);
		des2src(rPack->sphone3,outPack->sphone3);
		des2src(rPack->saddr,outPack->saddr);	//mac
		des2src(rPack->semp,outPack->semp);		
		ret=payment->transfer(handle,rPack,outPack);
		if(ret)
		{
			writelog(LOG_ERR,"与第三方系统交易失败 ret=%d",ret);
			return ret;
		}
		if(payment->pushflag_ != 1)
			PutRow(handle,outPack,pRetCode,szMsg);			
	}
	else
	{
		PutRow(handle,outPack,pRetCode,szMsg);			
	}
	return 0;
}
コード例 #5
0
static int NormalTrans(TRUSERID *handle,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	CAccTrans *pAccTrans=CAccTrans::getInstance();
	TRANS& trans=pAccTrans->trans;
	ST_CPACK aPack;
	ST_PACK *outPack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL2,F_LVOL8,F_LVOL10,F_LVOL11,F_LVOL12,F_SDATE0,F_SPHONE3,F_SADDR,F_LSAFE_LEVEL2,
		F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0);

	if(rPack->lvol0<1)
	{
		ERRTIP("请输入付款方卡号");
		return E_COMMON_ERR;
	}
	if(rPack->lvol2<1)
	{
		ERRTIP("请输入收款方卡号");
		return E_COMMON_ERR;
	}
	des2src(trans.refno,rPack->sphone3);		//交易参考号
	if(strlen(trans.refno)!=14)
	{
		 ERRTIP("交易参考号错误");
		 return E_COMMON_ERR;
	}
	T_t_refno tRefno;
	memset(&tRefno,0,sizeof(tRefno));

	ret=DB_t_refno_read_by_refno(trans.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_REFNO_N;
		else
			return E_DB_REFNO_R;
	}
	if(strncmp(tRefno.mac,rPack->saddr,8)!=0)
	{
		ERRTIP("交易参考号MAC校验错误");
		return E_COMMON_ERR;
	}
	if(RS_FAIL==tRefno.status)
	{
		ERRTIP("交易已失败");
		return E_COMMON_ERR;
	}
	T_t_transdtl transdtl;	
	memset(&transdtl,0,sizeof(transdtl));
	ret=DB_t_transdtl_read_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_NOTEXIST_TRANSDTL;
		else
			return E_DB_TRANSDTL_R;
	}
	if(RS_SUCC==tRefno.status)
	{
		outPack->lvol0=transdtl.cardno;
		outPack->lvol1=D4U5(transdtl.amount*100,0);
		outPack->lvol8=D4U5(transdtl.cardaftbal*100,0);
		outPack->lsafe_level2=rPack->lsafe_level+D4U5(transdtl.amount*100,0);
		des2src(outPack->sdate3,transdtl.transdate);
		des2src(outPack->stime3,transdtl.transtime);
		des2src(outPack->semp,transdtl.opercode);
		outPack->lwithdraw_flag=transdtl.termid;
		outPack->lserial1=transdtl.termseqno;
		des2src(outPack->sphone3,transdtl.refno);	
		PutRow(handle,outPack,pRetCode,szMsg);
		return 0;
	}
	int cardno=atoi(transdtl.voucherno);
	if(rPack->lvol2!=cardno)
	{
		ERRTIP("收款方卡号错误");
		return E_COMMON_ERR;
	}
	if(transdtl.status[0]!=DTLSTATUS_INIT)
	{
		ERRTIP("交易流水表状态错误");
		return E_COMMON_ERR;
	}
	des2src(trans.opercode,transdtl.opercode);
	trans.termid=transdtl.termid;
	trans.termseqno=transdtl.termseqno;
	trans.cardflag=0;
	trans.usecardflag=0;	
	trans.transcode=transdtl.transcode;
	trans.cardno=transdtl.cardno;	
	trans.purseno=transdtl.purseno;
	trans.paycnt=transdtl.cardcnt;
	trans.cardbefbal=transdtl.cardbefbal;
	trans.cardaftbal=transdtl.cardaftbal;
	trans.inputamt= transdtl.amount;	
	trans.unusedamt = trans.inputamt;
	
	T_t_card tOutCard;
	memset(&tOutCard,0,sizeof(tOutCard));

	T_t_card tInCard;
	memset(&tInCard,0,sizeof(tInCard));

	ret=DB_t_card_read_by_cardno(trans.cardno,&tOutCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno);
		else
			return E_DB_CARD_R;
	}
	ret=DB_t_card_read_by_cardno(rPack->lvol2,&tInCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_CARDNO,rPack->lvol2);
		else
			return E_DB_CARD_R;
	}
	trans.feetype=tOutCard.feetype;
	trans.custid=tOutCard.custid;
//	trans.cardaftbal=trans.cardbefbal;
	strcpy(pAccTrans->trans.draccno,tOutCard.accno);
	strcpy(pAccTrans->trans.craccno,tInCard.accno);
	
	ret=pAccTrans->doTrans();
	if(ret)
		return ret;
	ret=pAccTrans->doTransEnd();
	if(ret)
		return ret;
	transdtl.status[0]=DTLSTATUS_SUCCESS;
	ret=DB_t_transdtl_update_by_accdate_and_termid_and_termseqno(tRefno.accdate,tRefno.termid,tRefno.termseqno,&transdtl);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_TRANSDTL_N;
		else
			return E_DB_TRANSDTL_U;
	}
	tRefno.status=RS_SUCC;
	des2src(tRefno.lastsaved,trans.sysdatetime);
	ret=DB_t_refno_update_by_refno(tRefno.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_REFNO_N;
		else
			return E_DB_REFNO_U;
	}
	/////////////////////////////////////////////////////////////////////////////////////////////////
	//记录转入卡的卡交易流水	
	pAccTrans->Reset();
	trans.termid=transdtl.termid;
	trans.dpscnt=rPack->lvol3+1;
	trans.cardbefbal=rPack->lsafe_level/100.0;
	trans.cardaftbal=(rPack->lvol1+rPack->lsafe_level)/100.0;
	trans.cardno=atoi(transdtl.voucherno);
	if(trans.cardno!=rPack->lvol2)
	{
		ERRTIP("收款卡号不符");
		return E_COMMON_ERR;
	}
	ret=GetCustBaseInfoByCustID(tInCard.custid,trans.custname,trans.stuempno,trans.remark);
	if(ret)
		return ret;
	ret=pAccTrans->GetTermSeqno();
	if(ret)
	{
		return ret;
	}
	T_t_transdtl transdtl2;
	memset(&transdtl2,0,sizeof(transdtl2));
	des2src(transdtl2.refno,transdtl.refno);
	des2src(transdtl2.transdate,transdtl.transdate);
	des2src(transdtl2.transtime,transdtl.transtime);
	strcpy(transdtl2.accdate,transdtl.accdate);
	strcpy(transdtl2.acctime,transdtl.acctime);
	transdtl2.termid=trans.termid;
	transdtl2.termseqno=trans.termseqno;
	transdtl2.transcode=transdtl.transcode;
	sprintf(transdtl2.voucherno,"%d",transdtl.cardno);
	transdtl2.cardno=trans.cardno;
	transdtl2.purseno=trans.purseno;
	transdtl2.transflag =TF_DPS;
	transdtl2.cardcnt=trans.dpscnt;
	transdtl2.cardbefbal=trans.cardbefbal;
	transdtl2.cardaftbal=trans.cardaftbal;
	transdtl2.amount= transdtl.amount;
	transdtl2.managefee=0;
	transdtl2.custid=tInCard.custid;
	des2src(transdtl2.custname,trans.custname);
	des2src(transdtl2.opercode,trans.opercode);
	transdtl2.status[0]=DTLSTATUS_SUCCESS;
	des2src(transdtl2.showcardno,tInCard.showcardno);
	des2src(transdtl2.stuempno,trans.stuempno);
	transdtl2.exttype=EXTTYPE_OPPSNO;	
	des2src(transdtl2.extdata,transdtl.stuempno);
	sprintf(transdtl2.remark,"由(%s)转出",transdtl.custname);
	ret=DB_t_transdtl_add(&transdtl2);
	if(ret)
	{
	  if(DB_REPEAT==ret)
		return E_DB_TRANSDTL_E;
	  else
		return E_DB_TRANSDTL_I;
	}		
	T_t_account OutAccount;
	memset(&OutAccount,0,sizeof(OutAccount));
	ret=DB_t_account_read_lock_by_c0_and_accno(tOutCard.accno,&OutAccount);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_CARDACCNO,tOutCard.accno);
		else
			return E_DB_ACCOUNT_R;
	}
	OutAccount.paycnt=transdtl.cardcnt;
	OutAccount.cardbal=transdtl.cardaftbal;
	OutAccount.lastpaycnt=transdtl.cardcnt-1;
	OutAccount.lastcardbal=transdtl.cardbefbal;
	strcpy(OutAccount.lastaccdate,transdtl.transdate);
	ret=DB_t_account_update_lock_by_c0(&OutAccount);
	if(ret)
	{
		writelog(LOG_ERR,"更新付款方账户表错误ret=%d",ret);
		return E_DB_ACCOUNT_U;
	}

	T_t_account InAccount;
	memset(&InAccount,0,sizeof(InAccount));
	ret=DB_t_account_read_lock_by_c0_and_accno(tInCard.accno,&InAccount);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_CARDACCNO,tInCard.accno);
		else
			return E_DB_ACCOUNT_R;
	}
	InAccount.dpscnt=transdtl2.cardcnt;
	InAccount.cardbal=transdtl2.cardaftbal;
	InAccount.lastdpscnt=transdtl2.cardcnt-1;
	InAccount.lastcardbal=transdtl2.cardbefbal;
	strcpy(InAccount.lastaccdate,transdtl2.transdate);
	ret=DB_t_account_update_lock_by_c0(&InAccount);
	if(ret)
	{
		writelog(LOG_ERR,"更新收款方账户表错误ret=%d",ret);
		return E_DB_ACCOUNT_U;
	}
	outPack->lvol0=transdtl.cardno;
	outPack->lvol2=transdtl2.cardno;
	outPack->lvol1=D4U5(transdtl.amount*100,0);
	outPack->lvol8=D4U5(transdtl.cardaftbal*100,0);	
	outPack->lsafe_level2=D4U5(transdtl2.cardaftbal*100,0);
	des2src(outPack->sdate3,trans.accdate);
	des2src(outPack->stime3,trans.acctime);
	des2src(outPack->semp,trans.opercode);
	outPack->lwithdraw_flag=transdtl.termid;
	outPack->lserial1=transdtl.termseqno;
	des2src(outPack->sphone3,transdtl.refno);
	des2src(outPack->vsmess,trans.remark);
	
	PutRow(handle,outPack,pRetCode,szMsg);
	return 0;
}
コード例 #6
0
int F846317(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) {
    int ret=0;
    char oldaccdate[9]="";
    des2src(oldaccdate,rPack->sdate3);
    int oldtermid=rPack->lwithdraw_flag;
    int oldtermseqno=rPack->lserial1;
    CAccTrans *pAccTrans=CAccTrans::getInstance();
    TRANS& trans=pAccTrans->trans;
    des2src(pAccTrans->trans.opercode,rPack->semp);
    pAccTrans->trans.transcode=TC_POSDRAWREV;
    des2src(trans.refno,rPack->sphone3);
    if(14==strlen(trans.refno)) {
        trans.termid=rPack->lwithdraw_flag;
        T_t_refno tRefno;

        memset(&tRefno,0,sizeof(tRefno));

        ret=DB_t_refno_read_by_refno(trans.refno,&tRefno);
        if(ret) {
            if(DB_NOTFOUND==ret)
                return 0;
            else
                return E_DB_REFNO_R;
        }
        if(strncmp(tRefno.mac,rPack->saddr,8)!=0) {
            ERRTIP("交易参考号MAC校验错误");
            return E_COMMON_ERR;
        }
        if(RS_SUCC!=tRefno.status) {
            return E_TRANS_REVERSED;
        }
        des2src(oldaccdate,tRefno.accdate);
        oldtermid=tRefno.termid;
        oldtermseqno=tRefno.termseqno;
    } else {
        des2src(trans.chkopercode,rPack->semp_no);
        ret=chk_oper_pwd(trans.chkopercode,rPack->scust_limit);
        if(ret)
            return ret;
    }
    if(strlen(oldaccdate)<1)
        return E_INPUTNULL_ACCDATE;
    if(oldtermid<1)
        return E_INPUTNULL_TERMID;
    if(oldtermseqno<1)
        return E_INPUTNULL_TERMSEQNO;

    ret=pAccTrans->InitTrans();
    if(ret)
        return ret;

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

    ResetNormalCPack(&aPack,0,1);

    SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LSERIAL1,F_SSTATION0,F_VSMESS,F_STIME3,0);
    trans.cardflag=1;
    trans.usecardflag=1;
    trans.cardno = rPack->lvol0;
    pAccTrans->SetCardCntAndCardBal(rPack->lvol5,rPack->lvol6,rPack->lvol7);
    trans.aftdpscnt++;
    ret=doReverse(oldaccdate,oldtermid,oldtermseqno);
    if(ret)
        return ret;
    ret=SaveCardTransInfo();
    if(ret) {
        writelog(LOG_ERR,"SaveCardTransInfo ret=%d",ret);
    }
    outPack->lvol0=pAccTrans->trans.cardno;
    outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0);
    des2src(outPack->sdate3,pAccTrans->trans.accdate);
    des2src(outPack->stime3,pAccTrans->trans.acctime);
    des2src(outPack->semp,pAccTrans->trans.opercode);
    outPack->lserial1=pAccTrans->trans.termseqno;
    sprintf(outPack->vsmess,"冲正金额%.2lf 卡余额%.2lf元",pAccTrans->trans.transamt,pAccTrans->trans.cardaftbal);
    PutRow(handle,outPack,pRetCode,szMsg);
    return 0;
}
コード例 #7
0
int F850001(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret=0;
	CAccTrans& ats=CAccTrans::GetInst();
	TRANS& trans=ats.trans;
	des2src(trans.refno,rPack->sphone3);

	if(strlen(trans.refno)!=14)
	{
		 ERRTIP("交易参考号错误");
		 return E_COMMON_ERR;
	}
	T_t_refno tRefno;

	memset(&tRefno,0,sizeof(tRefno));

	ret=DB_t_refno_read_by_refno(trans.refno,&tRefno);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return 0;
		else
			return E_DB_REFNO_R;
	}
	if(strncmp(tRefno.mac,rPack->saddr,8)!=0)
	{
		ERRTIP("交易参考号MAC校验错误");
		return E_COMMON_ERR;
	}
	if(RS_SUCC!=tRefno.status)
	{
		TIPINFO("交易已冲正");
		return 0;
	}
	ats.trans.transcode=TC_TRANSREV;
	ats.trans.termid=tRefno.termid;
	ret=ats.InitTrans();
	if(ret)
		return ret;			
	des2src(ats.trans.chkopercode,rPack->semp_no);
	char authrightflag=rPack->sstatus2[0];
	if('1'==authrightflag)
	{
		ret=chk_oper_pwd(ats.trans.chkopercode,rPack->scust_limit);
		if(ret)
			return ret;
		ret=AccTransRev(tRefno.accdate,tRefno.termid,tRefno.termseqno);
		if(ret)
		{
			writelog(LOG_ERR,"acctransrev err ret=%d",ret);
			return ret;
		}			
	}
	else
	{
		ret=OnlineTransRev(tRefno.accdate,tRefno.termid,tRefno.termseqno);
		if(ret)
		{
			writelog(LOG_ERR,"acctransrev err ret=%d",ret);
			return ret;
		}
	}
	ST_CPACK aPack;
	ST_PACK *outPack = &(aPack.pack);
	ResetNormalCPack(&aPack,0,1);
		
	SetCol(handle,F_LVOL0,F_SPHONE3,F_SADDR,F_LWITHDRAW_FLAG,F_SDATE3,F_STIME3,F_SEMP,F_LSERIAL1,F_VSMESS,0);	
	outPack->lvol0=ats.trans.cardno;
	des2src(outPack->sdate3,ats.trans.accdate);
	des2src(outPack->stime3,ats.trans.acctime);
	des2src(outPack->semp,ats.trans.opercode);
	outPack->lserial1=ats.trans.termseqno;
	strcpy(outPack->sphone3,tRefno.refno);
	strcpy(outPack->saddr,tRefno.mac);
	strcpy(outPack->vsmess,ats.remark.c_str());
	PutRow(handle,outPack,pRetCode,szMsg);
	return 0;
}