コード例 #1
0
int F930057(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
//	writelog(LOG_DEBUG, "设备%s发送心跳",rPack->sdate1);
//	CAccTrans *pAccTrans=CAccTrans::getInstance();
//	GetCpackDataString(rPack,pAccTrans->cpackdata);
//	writelog(LOG_INFO,"cpack:[%s]",pAccTrans->cpackdata);
	
	char		devphyid[31]="";
	int 		ret=0;
	T_t_devmonitor  devmonitor;
	memset(&devmonitor,0,sizeof(devmonitor));

	devmonitor.deviceid=atoi(rPack->sorder2);

	if(devmonitor.deviceid<1)
	{
		des2src(devphyid, rPack->sdate1);
		ret = GetDevIdByDevPhyId(&(devmonitor.deviceid),devphyid);
		if(0 != ret)
		{
			writelog(LOG_ERR,"devphyid:%s",devphyid);
			return  ret;
		}
	}
	/*得到CPACK数据*/
	des2src(devmonitor.optime,rPack->sphone3);
	getsystimestamp(devmonitor.coltime);
	devmonitor.beatstatus=rPack->lvol2;
	des2src(devmonitor.cardverno,rPack->sserial4);
	devmonitor.hardiskper=rPack->damt0;
	devmonitor.memoryper=rPack->damt1;
	devmonitor.cpuper=rPack->damt2;
	des2src(devmonitor.devtime,rPack->sholder_ac_no2);

	ret=DB_t_devmonitor_update_by_deviceid(devmonitor.deviceid,&devmonitor);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
		{
			//设备心跳记录不存在(初始化时),则进行插入操作
			SQLCODE=0;
			ret=DB_t_devmonitor_add(&devmonitor);
			if(ret)
			{
				return E_DB_DEVMONITOR_I;
			}
			return 0;
		}
		else
		{
			return E_DB_DEVMONITOR_U;
		}
	}
	return 0;
}
コード例 #2
0
ファイル: F950070.cpp プロジェクト: nykma/ykt4sungard
int addPOSCheckPOS(int deviceid,T_t_device &tDevice)
{
	int ret;
	if(deviceid == 0)
	{
		ret = GetDevIdByDevPhyId(&(tDevice.deviceid),tDevice.devphyid);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
			{
				writelog(LOG_ERR,"device [%s] not exists",tDevice.devphyid);
				return ERRIF_POS_NOREG;
			}
			else
			{
				writelog(LOG_ERR,"GetDevIdByDevPhyId error");
				return ERRIF_SYSTEM;
			}
		}
	}
	else
	{
		tDevice.deviceid = deviceid;
	}
	ret = DB_t_device_read_by_deviceid(tDevice.deviceid,&tDevice);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
		{
			writelog(LOG_ERR,"deviceid [%d] not exists",tDevice.deviceid);
			return ERRIF_POS_NOREG;
		}
		else
		{
			writelog(LOG_ERR,"DB_t_device_read_by_deviceid error");
			return ERRIF_SYSTEM;
		}
	}
	if(tDevice.status[0] == STATUS_DELETE)
	{
		writelog(LOG_ERR,"device[%s]has been unregister!",tDevice.devphyid);
		return ERRIF_FRONT_CLOSE;
	}
	if(strcmp(tDevice.devtypecode,DEVITYPE_ADDPOS)!=0)
	{
		writelog(LOG_ERR,"device[%s] [%s]is not addpos !",tDevice.devphyid,tDevice.devtypecode);
		return ERRIF_POS_NOFUNC;
	}
	return 0;
}
コード例 #3
0
ファイル: F950052.cpp プロジェクト: nykma/ykt4sungard
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;
}
コード例 #4
0
int F930032(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg) {
    int ret = 0;						//返回码
    int hi_sign = 0;					//挂失解挂标志
    double h_temp_Serial_no = 0;		//本地流水号
    char logicdate[11]="";
    char sysdate[11]="";
    char systime[9]="";
    int dev_id=0;
    T_t_tif_tradeserial  tradeserial;

    memset(&tradeserial,0,sizeof(tradeserial));
    hi_sign = in_pack->lvol6;												//挂失解挂标志

    ret=chk_dyn_key(in_pack->lcert_code,in_pack->scust_limit2);
    if(ret) {
        *pRetCode = ret;
        goto L_RETU;
    }
    getsysdate(sysdate);
    getsystime(systime);
    ret=GetLogicDate(logicdate);												//业务日期
    if(ret) {
        *pRetCode = ret;
        goto L_RETU;
    }
    switch (hi_sign) {
    case 0:
        tradeserial.serial_type = TXCODE_CARD_LOSS;					//挂失
        break;
    case 1:
        tradeserial.serial_type = TXCODE_CARD_COMEBACK_LOSS;			//解挂
        break;
    case 2:
        tradeserial.serial_type = TXCODE_MODIFICATIONPW;				//修改密码
        break;
    default:
        *pRetCode = -1;
        writelog(LOG_ERR,"挂失解挂修改密码标志出错。ERRCODE[%d] ",*pRetCode);
        goto L_RETU;
        break;
    }
    /*	读取设备ID	*/
    ret = GetDevIdByDevPhyId(&dev_id,in_pack->sdate1);
    if (ret) {
        *pRetCode = ret;
        writelog(LOG_ERR,"GetDevIdByDevPhyId err[%d] ",ret);
        goto L_RETU;
    }

    tradeserial.serial_state = SERISTAT_NODEBT;								//流水状态

    ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&h_temp_Serial_no);
    if(ret) {
        *pRetCode = ret;
        writelog(LOG_ERR,"获取最大流水号错误: ERRCODE = [%d]",ret);
        goto L_RETU;
    }
    tradeserial.serial_no = D2I(h_temp_Serial_no);													//流水号

    snprintf(tradeserial.operate_date,9,"20%s",in_pack->spost_code);		//发生日期(格式化输入的日期)
    des2src(tradeserial.operate_time,in_pack->spost_code2);			//发生时间(格式化输入的时间)
    des2src(tradeserial.collect_date,sysdate);												//采集日期
    des2src(tradeserial.collect_time,systime);												//采集时间
    des2src(tradeserial.enteract_date,logicdate);											//处理日期
    des2src(tradeserial.enteract_time,systime);											//处理时间
    tradeserial.other_seri_no = in_pack->lvol4;													//上传端流水号
    tradeserial.serial_state = SERISTAT_DEBT;													//流水状态
    tradeserial.maindeviceid = in_pack->lcert_code;												//上传工作站标识
    tradeserial.deviceid = dev_id;														//采集设备标识
    tradeserial.cardno = in_pack->lvol5;														//卡号
    Strncpy_t(tradeserial.showid,in_pack->sstation0,sizeof(tradeserial.showid));						//显示卡号
    Strncpy_t(tradeserial.oldpwd,in_pack->sstock_code,sizeof(tradeserial.oldpwd));					//原始密码
    Strncpy_t(tradeserial.newpwd,in_pack->sstock_code2,sizeof(tradeserial.newpwd));				//更新密码
    des2src(tradeserial.opercode,"system");

    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;
    }
    return 0;
L_RETU:
    return -1;
}
コード例 #5
0
ファイル: F930037.c プロジェクト: nykma/ykt4sungard
int F930037(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int    ret=0;
	int    row=0;
	int dev_id=0;
	char devphy999_id[9]="";
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	T_t_pif_device 	p;
	T_t_pif_device		parent;

#ifdef DEBUG
	writelog(LOG_DEBUG,"subsystem_id[%d]",rPack->lcert_code);
	writelog(LOG_DEBUG,"dyn_key[%s]",rPack->scust_limit2);
#endif

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_SDATE2,F_SDATE1,F_LVOL4,F_SEMP,F_SDATE3,F_SHOLDER_TYPE,F_SNOTE2,F_LVOL1,F_LVOL5,F_STIME0,F_LVOL6,F_LVOL7,F_LVOL8,F_SSTATION0,F_SBANK_CODE,F_LVOL9,F_LVOL10,F_SSERIAL0,F_SSERIAL1,F_LVOL11,F_SCUST_AUTH,F_LVOL12,F_SCUST_AUTH2,F_LVOL0,0);

	writelog(LOG_DEBUG,"前置机%d下载设备档案",rPack->lcert_code);

	ret=chk_dyn_key(rPack->lcert_code,rPack->scust_limit2);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	strncpy(devphy999_id,rPack->sdate1,sizeof(devphy999_id)-1);
	trim(devphy999_id);
	if(strlen(devphy999_id)&&strncmp(devphy999_id,"00000000",8)!=0)
	{
		memset(&p,0,sizeof(p));
		ret = GetDevIdByDevPhyId(&dev_id,devphy999_id);
		if(ret)
		{
			*pRetCode=ret;
			goto L_RETU;
		}
		ret=DB_t_pif_device_read_by_devphy999_id(devphy999_id, &p);
		if(ret)
		{
			writelog(LOG_ERR,"devphy999_id[%s]",devphy999_id);
			if(DB_NOTFOUND==ret)
				*pRetCode=E_DB_DEVICE_N;
			else
				*pRetCode=E_DB_DEVICE_R;
			goto L_RETU;
		}
		if(p.state_id==DEVISTAT_LOGOUT)
		{
			*pRetCode=E_DB_DEVICE_N;
			goto L_RETU;
		}
		p.state_id=DEVISTAT_REGIST;
		if((strncmp(p.dev999_id,"FFFFFFFF",8)==0)||(strlen(p.dev999_id)==0))
		{
			*pRetCode=E_DB_DEVICE_N;
			goto L_RETU;
		}
		if(ROOT_DEVICE_ID == p.fdev_id)
			memset(out_pack->stime0,0,sizeof(out_pack->stime0));
		else
		{
			out_pack->lvol0 = p.device_id;
			memset(&parent,0,sizeof parent);
			ret = DB_t_pif_device_read_by_device_id(p.fdev_id,&parent);
			if(ret)
			{
				des2src(out_pack->stime0,"FFFFFFFF");
			}
			else
			{
				des2src(out_pack->stime0,parent.devphy999_id);
			}
		}
		strncpy(out_pack->sdate2,p.dev999_id,sizeof(out_pack->sdate2)-1);
		strncpy(out_pack->sdate1,p.devphy999_id,sizeof(out_pack->sdate1)-1);
		out_pack->lvol4=p.dev999_no;
		strncpy(out_pack->semp,p.devtype,sizeof(out_pack->semp)-1);
		strncpy(out_pack->sdate3,p.devversion,sizeof(out_pack->sdate3)-1);
		strncpy(out_pack->sholder_type,p.cardstr,sizeof(out_pack->sholder_type)-1);
		strncpy(out_pack->snote2,p.cardtype,sizeof(out_pack->snote2)-1);
		out_pack->lvol5=p.portcount;

		out_pack->lvol6=p.portno;
		out_pack->lvol7=p.state_id;
		out_pack->lvol8=p.joinmode;
		strncpy(out_pack->sstation0,p.comadd,sizeof(out_pack->sstation0)-1);
		strncpy(out_pack->sbank_code,p.port,sizeof(out_pack->sbank_code)-1);
		out_pack->lvol9=p.baudrate;
		out_pack->lvol10=p.comtype;
		strncpy(out_pack->sserial0,p.bsheetvdate,sizeof(out_pack->sserial0)-1);
		strncpy(out_pack->sserial1,p.bsheetver,sizeof(out_pack->sserial1)-1);
		out_pack->lvol11=p.lasttraserno;
		strncpy(out_pack->scust_auth,p.lasttradate,sizeof(out_pack->scust_auth)-1);
		out_pack->lvol12=p.lastshutserno;
		strncpy(out_pack->scust_auth2,p.lastshutdate,sizeof(out_pack->scust_auth2)-1);
		PutRow(handle,out_pack,pRetCode,szMsg);
		return 0;
	}

	ret=DB_t_pif_device_open_select_by_c1_and_subsystem_id(rPack->lcert_code);
	writelog(LOG_DEBUG,"subsystem [%d]",rPack->lcert_code);
	if(ret)
	{
			writelog(LOG_ERR,"sub_system_id[%d]",rPack->lcert_code);
			*pRetCode=E_DB_DEVICE_R;
			goto L_RETU;
	}
	while(1)
	{

		memset(&p,0,sizeof(p));
		ret=DB_t_pif_device_fetch_select_by_c1(&p);
		if(ret)
		{
			if(DB_NOTFOUND==ret)
			{
				if(row)
					break;
				else
					*pRetCode=E_DB_DEVICE_N;
			}
			else
				*pRetCode=E_DB_DEVICE_R;
			goto L_RETU;
		}
		if(p.state_id==DEVISTAT_LOGOUT  || PHYTYPE_999_DEV != p.phytype)
			continue;
		p.state_id=DEVISTAT_REGIST;
		if((strncmp(p.dev999_id,"FFFFFFFF",8)==0)||(strlen(p.dev999_id)==0))
			continue;
		if(ROOT_DEVICE_ID == p.fdev_id)
		{
			memset(out_pack->stime0,0,sizeof(out_pack->stime0));
			out_pack->lvol1 = -1;
		}
		else
		{
			out_pack->lvol1 = p.fdev_id;
			memset(&parent,0,sizeof parent);
			ret = DB_t_pif_device_read_by_device_id(p.fdev_id,&parent);
			if(ret)
			{
				des2src(out_pack->stime0,"FFFFFFFF");
			}
			else
			{
				des2src(out_pack->stime0,parent.dev999_id);
			}
		}
		out_pack->lvol0 = p.device_id;
		out_pack->lvol7=p.state_id;
		strncpy(out_pack->sdate2,p.dev999_id,sizeof(out_pack->sdate2)-1);
		strncpy(out_pack->sdate1,p.devphy999_id,sizeof(out_pack->sdate1)-1);
		out_pack->lvol4=p.dev999_no;
		strncpy(out_pack->semp,p.devtype,sizeof(out_pack->semp)-1);
		strncpy(out_pack->sdate3,p.devversion,sizeof(out_pack->sdate3)-1);
		strncpy(out_pack->sholder_type,p.cardstr,sizeof(out_pack->sholder_type)-1);
		strncpy(out_pack->snote2,p.cardtype,sizeof(out_pack->snote2)-1);
		out_pack->lvol5=p.portcount;
		out_pack->lvol6=p.portno;
		out_pack->lvol8=p.joinmode;
		strncpy(out_pack->sstation0,p.comadd,sizeof(out_pack->sstation0)-1);
		strncpy(out_pack->sbank_code,p.port,sizeof(out_pack->sbank_code)-1);
		out_pack->lvol9=p.baudrate;
		out_pack->lvol10=p.comtype;
		strncpy(out_pack->sserial0,p.bsheetvdate,sizeof(out_pack->sserial0)-1);
		strncpy(out_pack->sserial1,p.bsheetver,sizeof(out_pack->sserial1)-1);
		out_pack->lvol11=p.lasttraserno;
		strncpy(out_pack->scust_auth,p.lasttradate,sizeof(out_pack->scust_auth)-1);
		out_pack->lvol12=p.lastshutserno;
		strncpy(out_pack->scust_auth2,p.lastshutdate,sizeof(out_pack->scust_auth2)-1);
		row++;
		PutRow(handle,out_pack,pRetCode,szMsg);
		if(row%10==0)
			AnswerDataPart(handle,*pRetCode,szMsg);
	}
	AnswerData(handle,*pRetCode,szMsg);
	return 0;
L_RETU:
	return -1;
}
コード例 #6
0
static int do_check_buffer(char *status_buffer, const char *op_time) {
    int i;
    int buf_len;
    int ret;
    int deviceid = 0;
    char dev_phyno[31] = "";
    int dev_state = 0;
    T_t_devmonitor dev_monitor;
    char temp[3] = "";
    static const int sect_len = 10;
    char* delim = ";";
    char* delim2 = ",";
    char *devstatus_buffer;
    buf_len = strlen(status_buffer);
    char lastchar[2] = "";
    if (buf_len <= 0) {
        return 0;
    }
    if (g_devtypeflag == 3) {
        //判断status_buffer最后一位是否为 ';'
        strncpy(lastchar, status_buffer + buf_len - 1 , 1);
        if (strncmp(lastchar, ";", 1) != 0) {
            writelog(LOG_ERR, "上送记录不完整,status_buffer[%s].", status_buffer);
            return -1;
        }
        writelog(LOG_INFO, "上送记录,status_buffer[%s].", status_buffer);
        devstatus_buffer = strtok(status_buffer, delim);
        while (devstatus_buffer != NULL) {
            writelog(LOG_INFO, "devstatus_buffer=[%s]\n", devstatus_buffer);
            char* buf = strstr(devstatus_buffer, delim2);
            memset(temp, 0, sizeof temp);
            strncpy(temp, buf + 1 , 2);
            dev_state = strtoul(temp, NULL, 16);
            memset(dev_phyno, 0, sizeof dev_phyno);
            sscanf(devstatus_buffer, "%[^,]%*s", dev_phyno);
            writelog(LOG_INFO, "dev_phyno=[%s],dev_state=[%d]\n", dev_phyno, dev_state);
            if (g_flag == 1) {
                ret = GetDevIdByDevPhyId(&deviceid, dev_phyno);
                if (ret) {
                    writelog(LOG_ERR, "设备不存在,devphyid[%s].", dev_phyno);
                    //return ret;
                }
            } else {
                deviceid = atoi(dev_phyno);
                T_t_device tDevice;
                memset(&tDevice, 0, sizeof tDevice);
                ret = DB_t_device_read_by_deviceid(deviceid, &tDevice);
                if (ret) {
                    if (E_NOTEXIST_DEVICE == ret) {
                        writelog(LOG_ERR, "前置机心跳,设备不存在,deviceid[%s]", dev_phyno);
                        continue;
                    }
                    continue;
                }
            }
            memset(&dev_monitor, 0, sizeof dev_monitor);
            ret = DB_t_devmonitor_read_by_deviceid(deviceid, &dev_monitor);
            des2src(dev_monitor.optime, op_time);
            des2src(dev_monitor.coltime, CAccTrans::getInstance()->trans.sysdatetime);
            des2src(dev_monitor.devtime, op_time);
            dev_monitor.deviceid = deviceid;
            dev_monitor.beatstatus = dev_state;
            if (ret) {
                if (DB_NOTFOUND == ret) {
                    //dev_monitor.is_ws[0] = '1';
                    ret = DB_t_devmonitor_add(&dev_monitor);
                    if (ret) {
                        writelog(LOG_ERR, "增加设备监控记录失败!dev[%d] phyno[%s]", dev_monitor.deviceid, dev_phyno);
                        //return -1;
                    }
                    continue;
                }
                //return -1;
            } else {
                ret = DB_t_devmonitor_update_by_deviceid(deviceid, &dev_monitor);
                if (ret) {
                    writelog(LOG_ERR, "更新设备监控记录失败!");
                    if (DB_NOTFOUND == ret)
                        continue;
                    //return -1;
                }
            }
            /* 获取后续数据 */
            devstatus_buffer = strtok(NULL, delim);
        }
        return 1;
    } else if (g_devtypeflag == 0) {
        for (i = 0; i < buf_len; i += sect_len) {
            //鑫三强采用设备ID
            strncpy(dev_phyno, status_buffer + i, 8);
            dev_phyno[8] = '\0';
            strncpy(temp, status_buffer + i + 8, 2);
            dev_state = strtoul(temp, NULL, 16);
            if (g_flag == 1) {
                ret = GetDevIdByDevPhyId(&deviceid, dev_phyno);
                if (ret) {
                    writelog(LOG_ERR, "devphyid[%s]", dev_phyno);
                    return ret;
                }
            } else {
                deviceid = atoi(dev_phyno);
                T_t_device tDevice;
                memset(&tDevice, 0, sizeof tDevice);
                ret = DB_t_device_read_by_deviceid(deviceid, &tDevice);
                if (ret) {
                    if (E_NOTEXIST_DEVICE == ret) {
                        writelog(LOG_ERR, "前置机心跳,设备不存在[%s]", dev_phyno);
                        continue;
                    }
                    continue;
                }
            }
            memset(&dev_monitor, 0, sizeof dev_monitor);
            ret = DB_t_devmonitor_read_by_deviceid(deviceid, &dev_monitor);
            des2src(dev_monitor.optime, op_time);
            des2src(dev_monitor.coltime, CAccTrans::getInstance()->trans.sysdatetime);
            des2src(dev_monitor.devtime, op_time);
            dev_monitor.deviceid = deviceid;
            dev_monitor.beatstatus = dev_state;
            if (ret) {
                if (DB_NOTFOUND == ret) {
                    //dev_monitor.is_ws[0] = '1';
                    ret = DB_t_devmonitor_add(&dev_monitor);
                    if (ret) {
                        writelog(LOG_ERR, "增加设备监控记录失败!dev[%d] phyno[%s]", dev_monitor.deviceid, dev_phyno);
                        return -1;
                    }
                    continue;
                }
                return -1;
            } else {
                ret = DB_t_devmonitor_update_by_deviceid(deviceid, &dev_monitor);
                if (ret) {
                    writelog(LOG_ERR, "更新设备监控记录失败!");
                    if (DB_NOTFOUND == ret)
                        continue;
                    return -1;
                }
            }
        }
        if (buf_len < 250) {
            return 0;
        }
    }
    return 1;
}
コード例 #7
0
ファイル: F950053.cpp プロジェクト: nykma/ykt4sungard
int F950053(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;
	int lastdevseqno=rPack->lvol4;
	char devphyid[31]="";
	des2src(devphyid,rPack->sdate1);
	T_t_transdtl transdtl;

	memset(&transdtl,0,sizeof(transdtl));
	ret=DB_t_transdtl_read_by_transdate_and_devphyid_and_devseqno(trans.transdate,devphyid,lastdevseqno,&transdtl);
	if(ret)
	{
		writelog(LOG_ERR,"transdate[%s]devphyid[%s]devseqno[%d]",trans.transdate,devphyid,lastdevseqno);
		if(DB_NOTFOUND==ret)
			return 0;
		else
			return E_DB_TRANSDTL_R;

	}
	if(transdtl.revflag[0]=='1')
	{
		return 0;
	}
	ret=GetDevIdByDevPhyId(&(trans.termid),devphyid);
	if(ret)
	{
		return ret;
	}
 	pAccTrans->GetTermSeqno();
	if(transdtl.transcode==TC_POSDEPOSIT)
		pAccTrans->trans.transcode=TC_POSDEPOSITREV;
	else if(transdtl.transcode==TC_SHOPPOSDEPOSIT)
		pAccTrans->trans.transcode=TC_SHOPPOSDEPOSITREV;
	else
		return E_TRANSCODE_NOT_SAVING;
	ret=doReverse(transdtl.accdate,transdtl.termid,transdtl.termseqno);
	if(ret)
		return ret;
	
	ST_CPACK aPack;
	ST_PACK *outPack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL5,F_LVOL10,F_LCERT_CODE,0);
	
	outPack->lvol5 = transdtl.cardno;
	outPack->lvol10 = (int)D4U5(transdtl.cardaftbal*100,0);
	outPack->lcert_code = transdtl.termseqno;
	
//	outPack->lvol0=pAccTrans->trans.cardno;
//	outPack->lvol8=D4U5(pAccTrans->trans.cardaftbal*100,0);
//	des2src(outPack->sdate3,pAccTrans->sysPara.sSettleDate);
//	des2src(outPack->semp,pAccTrans->trans.opercode);
//	outPack->lserial1=pAccTrans->trans.termseqno;
	sprintf(outPack->vsmess,"冲正金额%.2lf 卡余额%.2lf",trans.transamt,trans.cardaftbal);
	PutRow(handle,outPack,pRetCode,szMsg);
	return 0;
} 
コード例 #8
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;
コード例 #9
0
ファイル: F930071.cpp プロジェクト: nykma/ykt4sungard
static int do_check_buffer(const char *status_buffer,const char *op_time)
{
	int count,i;
	int buf_len;
	int ret;
	int deviceid=0;
	char dev_phyno[31]= "";
	int dev_state = 0;
	T_t_device tDevice;
	T_t_devmonitor dev_monitor;
	char temp[3] = "";
	static const int sect_len = 10;
	//writelog(LOG_DEBUG,"status buffer [%s]",status_buffer);
	buf_len = strlen(status_buffer);
	if(buf_len <= 0)
	{
		return 0;
	}
	for(i = 0;i < buf_len;i+=sect_len)
	{
		//鑫三强采用设备ID
		strncpy(dev_phyno,status_buffer+i,8);
		dev_phyno[8] = '\0';
		strncpy(temp,status_buffer+i+8,2);
		dev_state = strtoul(temp,NULL,16);
        if(g_FrontType !=SUBSYSTYPE_XSQ)
        {
			ret=GetDevIdByDevPhyId(&deviceid,dev_phyno);
			if(ret)
			{
				writelog(LOG_ERR,"devphyid[%s]",dev_phyno);
				return ret;
			}
        }
        else
        {
		deviceid=atoi(dev_phyno);
		memset(&tDevice,0,sizeof tDevice);
		ret = DB_t_device_read_by_deviceid(deviceid,&tDevice);
		if(ret)
		{
			if(E_NOTEXIST_DEVICE== ret)
			{
				writelog(LOG_ERR,"前置机心跳,设备不存在[%s]",dev_phyno);
				continue;
			}
			continue;
		}
        }
		memset(&dev_monitor,0,sizeof dev_monitor);
		ret = DB_t_devmonitor_read_by_deviceid(tDevice.deviceid,&dev_monitor);
		des2src(dev_monitor.optime,op_time);
		des2src(dev_monitor.coltime,CAccTrans::getInstance()->trans.sysdatetime);
		des2src(dev_monitor.devtime,op_time);
		dev_monitor.deviceid = tDevice.deviceid;
		dev_monitor.beatstatus = dev_state;
		if(ret)
		{
			if(DB_NOTFOUND == ret)
			{
				//dev_monitor.is_ws[0] = '1';
				ret = DB_t_devmonitor_add(&dev_monitor);
				if(ret)
				{
					writelog(LOG_ERR,"增加设备监控记录失败!dev[%d] phyno[%s]"
					,dev_monitor.deviceid,dev_phyno);
					return -1;
				}
				continue;
			}
			return -1;
		}
		else
		{
			ret = DB_t_devmonitor_update_by_deviceid(tDevice.deviceid,&dev_monitor);
			if(ret)
			{
				writelog(LOG_ERR,"更新设备监控记录失败!");
				if(DB_NOTFOUND == ret)
					continue;
				return -1;
			}
		}
	}
	if(buf_len < 250)
	{
		return 0;
	}
	return 1;
}
コード例 #10
0
ファイル: F849003.cpp プロジェクト: nykma/ykt4sungard
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;
}