Example #1
0
static void GenTradeResMsgBody(char *msgbody,INFO_TRADE &info_trade)
{
	char buf[1024]="";
	AddXmlItemStr(buf, "SchoolCode", info_trade.SchoolCode);
	AddXmlItemStr(buf, "CusName", info_trade.CusName);
	AddXmlItemDbl(buf, "ICCardNotWrt", info_trade.ICCardNotWrt);
	AddXmlItemStr(buf, "ReMark","");
	AddXmlItemStr(msgbody, "MsgBody", buf);						// 全包含在MsgBody 中		
}
static void GenMsgBodyQuery(char *msgbody,ST_PACK *rPack)
{
	char buf[1024]="";
	AddXmlItemStr(buf, "SchoolCode", SCHOOLCODE_AHUT);			//学校代码
	AddXmlItemStr(buf, "IcCard", rPack->sphone);					//校园卡卡号(使用学工号)
	AddXmlItemInt(buf, "SignFlag", 1);								//签约标志
	AddXmlItemStr(buf, "ActNo", rPack->scust_limit2);				// 银行卡号

	AddXmlItemStr(msgbody, "MsgBody", buf);						//全包含在MsgBody 中	
	writelog(LOG_DEBUG,"msgbody[%s] ",msgbody);
}
// 冲正包体
static void GenMsgBodyTransRev(char *msgbody,ST_PACK *rPack)
{
	char buf[1024]="";
	AddXmlItemStr(buf, "SchoolCode", SCHOOLCODE_AHUT);			//学校代码
	AddXmlItemStr(buf, "IcCard", rPack->sphone);					//校园卡卡号(使用学工号)
	AddXmlItemDbl(buf, "Amount", rPack->damt0);					// 交易金额
	AddXmlItemStr(buf, "RSeqNo", rPack->sholder_ac_no);			//交易流水号

	AddXmlItemStr(msgbody, "MsgBody", buf);						//全包含在MsgBody 中	
	writelog(LOG_DEBUG,"msgbody[%s] ",msgbody);
}
static void GenMsgHead(char *msghead,ST_PACK *rPack)
{
	char buf[1024]="";
	AddXmlItemStr(buf,"AreaNo","");								//地区代码
	AddXmlItemStr(buf,"ChanNo","");								//渠道代码
	AddXmlItemInt(buf, "TerminalNo", rPack->lvol6);					//终端编号
	AddXmlItemStr(buf,"TransNo",rPack->sholder_ac_no);			//交易流水号
	AddXmlItemStr(buf,"TransDate",rPack->sdate0);				//交易日期
	AddXmlItemStr(buf,"TransTime",rPack->stime0);					//交易时间
	AddXmlItemStr(buf,"BankNo","");								//机构代码
	AddXmlItemStr(buf,"TellerNo","");								//柜员代码
	AddXmlItemInt(buf, "FuncTionFlag", 1);							//处理标志
	AddXmlItemStr(msghead, "MsgHead", buf);						// 全包含在MsgHead 中	
	writelog(LOG_DEBUG,"msghead[%s] ",msghead);
}
Example #5
0
int F930103(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
       T_t_tif_meslist tMesList;

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

	des2src(tMesList.devphy999_id, in_pack->sdate0);
	trim(tMesList.devphy999_id);
	if(strlen(tMesList.devphy999_id)==0)
	{
		*pRetCode=E_DEVPHYID_NULL;
		goto L_RETU;
	}
	AddXmlItemStr(tMesList.incontent,XML_KEY_DEV999_ID,tMesList.devphy999_id);
	AddXmlItemInt(tMesList.incontent,XML_KEY_WORKMODE, in_pack->lvol3);
	AddXmlItemInt(tMesList.incontent,XML_KEY_LOCK1_TIME, in_pack->lvol5);
	AddXmlItemInt(tMesList.incontent,XML_KEY_LOCK2_TIME, in_pack->lvol6);
	AddXmlItemStr(tMesList.incontent,XML_KEY_IS_ALLEYWAY, in_pack->sstatus0);
	AddXmlItemStr(tMesList.incontent,XML_KEY_IS_SAVE, in_pack->sstatus1);
	AddXmlItemStr(tMesList.incontent,XML_KEY_IS_LCD, in_pack->sstatus2);
	AddXmlItemStr(tMesList.incontent,XML_KEY_SYSPWD, in_pack->semp_pwd);
	AddXmlItemInt(tMesList.incontent,XML_KEY_BAUDRATE, 0);
	AddXmlItemInt(tMesList.incontent,XML_KEY_CARDSTR, 100);
	tMesList.funid = iRequest;
	tMesList.level =1;
	ret=AddMsgLst(&tMesList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	return 0;
L_RETU:
	return  -1;
}
Example #6
0
static void GenBindResMsgBody(char *msgbody,INFO_BIND &info_bind)
{
	char buf[1024]="";
	AddXmlItemStr(buf, "SchoolCode", info_bind.SchoolCode);
	AddXmlItemStr(buf, "TrType", info_bind.TrType);
	AddXmlItemStr(buf, "CusName", info_bind.CusName);
	AddXmlItemStr(buf, "IcCard", info_bind.IcCard);
	AddXmlItemStr(buf, "ReMark","");
	AddXmlItemStr(msgbody, "MsgBody", buf);						// 全包含在MsgBody 中		
}
Example #7
0
int F930109(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
	T_t_tif_meslist tMesList;
	T_t_pif_device tDevice;
	memset(&tDevice,0,sizeof tDevice);

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

	if(strlen(in_pack->sdate0)==0)
	{
		*pRetCode=E_DEVPHYID_NULL;
		goto L_RETU;
	}
	AddXmlItemInt(tMesList.incontent,XML_KEY_OUTNUM,in_pack->lvol5);		//条数
	AddXmlItemStr(tMesList.incontent,XML_KEY_HOLIDAY,in_pack->vsvarstr0);	//节假日
	//FIXME
	//需要查询节假日表下传
	//FIXME
	if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice)))
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	tMesList.devid = tDevice.device_id;
	tMesList.funid = 930109;
	tMesList.level =1;
	tMesList.max_send_cnt = 10;
	ret = DB_t_tif_meslist_del_by_devid_and_funid(tMesList.devid,tMesList.funid);
	if(ret)
	{
		if(DB_NOTFOUND != ret)
		{
			return E_DB_MESLIST_D;
		}
	}
	ret=AddMsgLst(&tMesList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	return 0;
L_RETU:
	return  -1;
}
Example #8
0
int F930201(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret;
	T_t_tif_meslist tMeslist;
	T_t_device tDevice;
	memset(&tDevice,0,sizeof tDevice);
	
	memset(&tMeslist,0,sizeof tMeslist);
	if(strlen(in_pack->sdate0) != 8)
	{
		return E_DEVPHYID_NULL;
	}
	tMeslist.funid = 930201;
	tMeslist.level = 2;
	tMeslist.max_send_cnt = 10;
	tMeslist.del_flag[0] = '0';
	AddXmlItemStr(tMeslist.incontent,XML_KEY_DEVPHY999_NO,in_pack->sdate0);
	if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice)))
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	tMeslist.devid = tDevice.deviceid;
	ret = DB_t_tif_meslist_del_by_devid_and_funid(tMeslist.devid,tMeslist.funid);
	if(ret)
	{
		if(ret != DB_NOTFOUND)
		{
			*pRetCode = E_DB_MESLIST_D;
			goto L_RETU;
		}
	}
	ret = AddMsgLst(&tMeslist);
	if(ret)
	{
		writelog(LOG_ERR,"add message list 930201 error!");
		*pRetCode = E_DB_MESLIST_I;
		goto L_RETU;
	}
	return 0;
L_RETU:
		return -1;
}
Example #9
0
int F930011(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
       T_t_tif_meslist tMesList;
	T_t_pif_device tDevice;

	memset(&tMesList,0,sizeof(tMesList));
	memset(&tDevice,0,sizeof(tDevice));

	if(strlen(in_pack->sdate0) == 0 )
	{
		*pRetCode = E_DEVPHYID_NULL;
		goto L_RETU;
	}

	AddXmlItemStr(tMesList.incontent, XML_KEY_CONCODEVER, in_pack->sserial2);
	AddXmlItemInt(tMesList.incontent, XML_KEY_CONCODE, in_pack->lvol4);

	if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice)))
	{
		*pRetCode = ret;
		goto L_RETU;
	}

	tMesList.devid = tDevice.device_id;
	tMesList.funid = 930011;
	tMesList.level = 2;
	ret=AddMsgLst(&tMesList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	return 0;
L_RETU:
	return  -1;	
}
Example #10
0
static void GenResMsgHead(char *msghead,char *refno,int errcode,char *errmsg)
{
	char buf[1024]="";
	char sysdate[9]="";
	char systime[7]="";
	getsysdate(sysdate);
	getsystime(systime);
	AddXmlItemStr(buf,"AreaNo","");								//地区代码
	AddXmlItemStr(buf,"ChanNo","");								//渠道代码
	if(refno != NULL)
		AddXmlItemStr(buf,"TransNo",refno);						//交易流水号
	else
		AddXmlItemStr(buf,"TransNo","");							
	AddXmlItemStr(buf,"TransDate",sysdate);						//交易日期
	AddXmlItemStr(buf,"TransTime",systime);						//交易时间
	AddXmlItemStr(buf,"BankNo","");								//机构代码
	AddXmlItemStr(buf,"TellerNo","");								//柜员代码
	AddXmlItemInt(buf, "FuncTionFlag", 1);							//处理标志
	if(errcode!=0)
		AddXmlItemInt(buf, "ResultCode", errcode);
	else
		AddXmlItemStr(buf, "ResultCode", "0000");
	AddXmlItemStr(buf, "Err_Info", errmsg);
	AddXmlItemStr(msghead, "MsgHead", buf);						// 全包含在MsgHead 中	
}
Example #11
0
int F930063(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
    int ret = 0;
    int cnt=0;
    int msgid=0;
    T_t_msglist tMsgList;
    T_t_device tDevice;
    memset(&tDevice,0,sizeof tDevice);

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

    ResetNormalCPack(&aPack,0,1);
    SetCol(handle,0);
    SetCol(handle,F_VSVARSTR0,0);
    memset(&tMsgList,0,sizeof(tMsgList));

    if(strlen(in_pack->sdate0)==0)
    {
        *pRetCode=E_DEVPHYID_NULL;
        goto L_RETU;
    }

    AddXmlItemStr(tMsgList.reqdata, XML_KEY_ADMPWD, in_pack->semp_pwd);

    if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice)))
    {
        *pRetCode = ret;
        goto L_RETU;
    }
    tMsgList.deviceid = tDevice.deviceid;
    tMsgList.funcno = 930063;
    tMsgList.msglevel = 2;
    ret=AddMsgLst(&tMsgList);
    if(ret)
    {
        *pRetCode=ret;
        writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
        goto L_RETU;
    }
    if(iRequest!=tMsgList.funcno)
        return 0;
    ret=db_commit();
    if(ret)
    {
        writelog(LOG_ERR,"db_commit ret[%d]",ret);
        *pRetCode=E_DB_COMMIT;
        goto  L_RETU;
    }
    msgid=tMsgList.msgid;
    des2src(out_pack->sdate0,in_pack->sdate0);
    for(cnt=0; (cnt<10)&&(tMsgList.errcode!=0); cnt++)
    {
        sleep(1);
        memset(&tMsgList,0,sizeof(tMsgList));
        ret=DB_t_msglist_read_by_msgid(msgid, &tMsgList);
        if(ret)
        {
            writelog(LOG_ERR,"DB_t_msglist_read_by_msgid err[%d]",ret);
            *pRetCode=E_DB_MSGLIST_R;
            goto L_RETU;
        }
    }
    switch(tMsgList.errcode)
    {
    case 0:		//成功
        des2src(out_pack->vsvarstr0,"成功");
        break;
    case 9999:		//交易未处理
        des2src(out_pack->vsvarstr0,"前置机无应答");
        break;
    default:			//交易已经处理,但结果是失败
        des2src(out_pack->vsvarstr0,tMsgList.errmsg);
        break;
    }
    PutRow(handle,out_pack,pRetCode,szMsg);
    return 0;
L_RETU:
    return  -1;
}
int F930105(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
	T_t_device tDevice;
	memset(&tDevice,0,sizeof tDevice);
	
	T_t_msglist tMsgList;
	memset(&tMsgList,0,sizeof(tMsgList));

	if(strlen(in_pack->sdate0)==0)
	{
		*pRetCode=E_DEVPHYID_NULL;
		goto L_RETU;
	}
	if(in_pack->lvol3<1||in_pack->lvol3>8)
	{
		*pRetCode=E_INPUT_DATA_INVAILD;
		goto L_RETU;
	}

	if((ret = get_devinfo_by_phyid(in_pack->sdate0,&tDevice)))
	{
		*pRetCode = ret;
		goto L_RETU;
	}

	tMsgList.deviceid = tDevice.deviceid;
	ret = process930105(tDevice.deviceid,in_pack->lvol3);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}

	AddXmlItemInt(tMsgList.reqdata,XML_KEY_WEEKNO,in_pack->lvol3);			//星期
	AddXmlItemInt(tMsgList.reqdata,XML_KEY_OUTNUM,in_pack->lvol5);			//记录数
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME1,in_pack->saddr);		//时间段1
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME2,in_pack->saddr2);		//时间段2
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME3,in_pack->sall_name);	//时间段3
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME4,in_pack->snote);		//时间段4
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME5,in_pack->snote2);		//时间段5
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME6,in_pack->scert_addr);	//时间段6
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME7,in_pack->sbankname);	//时间段7
	AddXmlItemStr(tMsgList.reqdata,XML_KEY_DOORTIME8,in_pack->sbankname2);	//时间段8
	//FIXME
	//需要查询时间段表下传
	//FIXME
	//tMsgList.funcno = iRequest;
	tMsgList.funcno=930105;
	tMsgList.pfuncno = 930105;
	tMsgList.msglevel = MESLIST_PRIORITY_REALTIME;
	// 重试10次
	tMsgList.maxsendcnt = 10;

	ret=AddMsgLst(&tMsgList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	return 0;
L_RETU:
	return  -1;
}
Example #13
0
//圈存机写卡失败冲正(实际并不冲正,只是改写卡状态)
int Pos_WriteErrCard(INNER_TRANS_REQUEST * pNode)
{

	int ret = 0;
	int card_id = 0;
	char logicdate[11]="";
	int serial_no=0;
	T_t_pif_card  card;
	T_t_tif_tradeserial tradeserial;

	INNER_TRANS_REQUEST from_pos;

	memset(&tradeserial,0,sizeof(tradeserial));
	memset(&from_pos,0,sizeof(from_pos));
	memset(&card,0,sizeof(card));

	memcpy(&from_pos,pNode,sizeof(from_pos));
	ret=GetLogicDate(logicdate);								//业务日期
	if(ret)
	{
		db_chk_err(__FILE__,__LINE__,&sqlca);
		writelog(LOG_ALERT,"GetLogicDate err,sqlcode[%d]",ret);
		return E_TRANS_UNKNOW_ERROR;
	}

	serial_no=from_pos.RecvNo;
	ret=DB_t_tif_tradeserial_read_by_serial_no(serial_no,&tradeserial);
	if(ret)
	{
		db_chk_err(__FILE__,__LINE__,&sqlca);
		writelog(LOG_ALERT,"DB_t_tif_tradeserial_read_by_serial_no err,sqlcode[%d]",ret);
		return E_TRANS_UNKNOW_ERROR;
	}
	//修改原卡状态为发卡写卡失败状态
	card_id = tradeserial.card_id;

	ret=DB_t_pif_card_read_lock_by_cur_and_card_id(card_id, &card);
	if(ret)
	{
		db_chk_err(__FILE__,__LINE__,&sqlca);
		writelog(LOG_ALERT,"DB_t_pif_card_read_lock_by_cur_and_card_id err,sqlcode[%d]",ret);
		return E_TRANS_UNKNOW_ERROR;
	}

	card.state_id[CARDSTAT_TYPE_WFAIL]=STATE_TRUE;
	memset(card.comments,0,sizeof(card.comments));
	AddXmlItemStr(card.comments, XML_KEY_OPERATEDATE,logicdate);
	AddXmlItemInt(card.comments,XML_KEY_SERIALNO,serial_no);
	AddXmlItemInt(card.comments,XML_KEY_TRADECODE,TRADE_INNER_TRANS);

	ret=DB_t_pif_card_update_lock_by_cur(&card);
	if(ret)
	{
		db_chk_err(__FILE__,__LINE__,&sqlca);
		writelog(LOG_ALERT,"DB_t_pif_card_update_lock_by_cur err,sqlcode[%d]",ret);
		return E_TRANS_UNKNOW_ERROR;
	}
	DB_t_pif_card_free_lock_by_cur();

	writelog(LOG_INFO,"update card status succeed!");

	return 0;

}
Example #14
0
int F930007(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
 	int cnt=0;
	int mesid=0;
       T_t_tif_meslist tMesList;
	T_t_pif_device tDevice;

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

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,0);
	memset(&tMesList,0,sizeof(tMesList));
	memset(&tDevice,0,sizeof(tDevice));

	des2src(tMesList.devphy999_id, in_pack->sdate0);
	trim(tMesList.devphy999_id);
	if(strlen(tMesList.devphy999_id)==0)
	{
		*pRetCode=E_DEVPHYID_NULL;
		goto L_RETU;
	}
	ret=get_devinfo_by_phyid(tMesList.devphy999_id,&tDevice);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"get_devinfo_by_phyid err[%d]",ret);
		goto L_RETU;
	}
	AddXmlItemInt(tMesList.incontent, XML_KEY_DEV999_NO, tDevice.dev999_no);		//机号
	AddXmlItemStr(tMesList.incontent, XML_KEY_DEV999_ID, tDevice.dev999_id);		//注册号	
	AddXmlItemInt(tMesList.incontent, XML_KEY_BAUDRATE, tDevice.baudrate);		//波特率
	AddXmlItemStr(tMesList.incontent, XML_KEY_SYSPWD, tDevice.syspwd);			//系统员密码	
	AddXmlItemStr(tMesList.incontent, XML_KEY_ADMPWD,tDevice.admpwd);			//管理员密码
	AddXmlItemInt(tMesList.incontent, XML_KEY_PWDONOFF,tDevice.pwdonoff);		//密码开关	
	AddXmlItemStr(tMesList.incontent, XML_KEY_CARDSTR, "100");					//卡片结构	
	AddXmlItemInt(tMesList.incontent, XML_KEY_CARDUSENUM,tDevice.cardusenum);	//卡的最大使用次数\允许最大消费次数	
	AddXmlItemInt(tMesList.incontent, XML_KEY_MAXDEPOSIT, tDevice.maxdeposit);	//钱包最高存款限额
	AddXmlItemInt(tMesList.incontent, XML_KEY_MINDEPOSIT, tDevice.mindeposit);		//钱包最低剩余款限额	
	AddXmlItemInt(tMesList.incontent, XML_KEY_RATION, tDevice.ration);				//定值收费方式使用的定值额\定值金额
	AddXmlItemStr(tMesList.incontent, XML_KEY_PUSERNO, tDevice.puserno);			//钱包代码\钱包号	
	AddXmlItemInt(tMesList.incontent, XML_KEY_MAXTRADE, tDevice.maxtrade);		//每次交易最高额\大额消费限额	
	AddXmlItemStr(tMesList.incontent, XML_KEY_VCARDSET, tDevice.cardtype);		//终端机适用用户卡类别	
	AddXmlItemStr(tMesList.incontent, XML_KEY_FUNONOFF, tDevice.funonoff);			//收费机增强功能开关	
	AddXmlItemInt(tMesList.incontent, XML_KEY_FEETYPE, tDevice.feetype);			//收费方式

	tMesList.funid = 930007;
	tMesList.level = 2;
	ret=AddMsgLst(&tMesList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	if(iRequest!=tMesList.funid)
		return 0;	
	ret=db_commit();
	if(ret)
	{
		writelog(LOG_ERR,"db_commit ret[%d]",ret);
		*pRetCode=E_DB_COMMIT;
		goto  L_RETU;
	}
	mesid=tMesList.mesid;
	des2src(out_pack->sdate0,in_pack->sdate0);
	for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++)
	{
		sleep(1);
		memset(&tMesList,0,sizeof(tMesList));
		ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList);
		if(ret)
		{
			writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret);
			*pRetCode=E_DB_MESLIST_R;
			goto L_RETU;
		}
	}
	switch(tMesList.ecode)
	{
		case 0:		//成功
			des2src(out_pack->vsvarstr0,"成功");
			break;
		case 9999:		//交易未处理
			des2src(out_pack->vsvarstr0,"前置机无应答");
			break;
		default:			//交易已经处理,但结果是失败
			des2src(out_pack->vsvarstr0,tMesList.emsg);				
			break;
	}	
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
L_RETU:
	return  -1;	
}
Example #15
0
int F849014(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret=0;
	int card_id = 0;
	T_t_pif_card tCard;
	char buf[64] = "";
	char comments[256] = "";
	char reqdata[1024] = "";
	char temp[1024] = "";
	ST_CPACK aPack;
	ST_PACK* out_pack = &(aPack.pack);
	char svr_ip[21 ] = "";
	int svr_port = 0;

	CTcpSocket sock;
	KSG_GW_PACK_t * resp = NULL;

	if(strlen(in_pack->sname) < 1)
	{
		*pRetCode = E_INPUT_DORM_NO;
		goto L_RETU;
	}
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSMESS,0);

	ret = GetPowerServerInfo(svr_ip,&svr_port);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	gw_server_info_t svrinfo;
	des2src(svrinfo.server_ip,svr_ip);
	svrinfo.server_port = svr_port;
	svrinfo.sock = &sock;
	AddXmlItemStr(temp,XML_KEY_DORM_NO,in_pack->sname);
	writelog(LOG_DEBUG,"xml[%s]",temp);
	sprintf(reqdata,"<YKT_DATA>%s</YKT_DATA>",temp);
	writelog(LOG_DEBUG,"xml[%s]",reqdata);
	ret = SendToServer(&svrinfo,QUERY_DORM_NAME,reqdata);
	if(ret)
	{
		writelog(LOG_DEBUG,"电控返回数据[%d]",ret);
		*pRetCode =ret;
		goto L_RETU;
	}

	ret = RecvFromServer(&svrinfo,&resp);
	if(ret)
	{
		writelog(LOG_DEBUG,"电控返回数据[%d]",ret);
		*pRetCode = ret;
		goto L_RETU;
	}
	else
	{
		if(resp->func_no != QUERY_DORM_NAME || resp->retcode != 0)
		{
			writelog(LOG_DEBUG,"funcno [%d] ret[%d]",resp->func_no,resp->retcode);
			*pRetCode = E_POWER_RECV_ERR;
			goto L_RETU;
		}
		des2src(reqdata,resp->data);
		ret = GetXmlValue(comments,sizeof comments,XML_KEY_DORM_NAME,reqdata);
		if(ret)
		{
			writelog(LOG_DEBUG,"无数据[%s][%d]",reqdata,ret);
			*pRetCode = ret;
			goto L_RETU;
		}
		des2src(out_pack->vsmess,comments);
		PutRow(handle,out_pack,pRetCode,szMsg);
	}
	if(resp)
		free(resp);
	return 0;
L_RETU:
	if(resp)
		free(resp);
	return -1;
}
Example #16
0
int F930005(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
	int cnt=0;
	int mesid=0;
	char sCardState[5]="";
       T_t_tif_meslist tMesList;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,0);

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

//	des2src(tMesList.devphy999_id, in_pack->sdate0);

	ret=GetCardState(in_pack->lvol0,sCardState);
	if (ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	if('2'==sCardState[CARDSTAT_TYPE_REG])
	{
		*pRetCode = E_CARDNO_LOGOUT;
		goto L_RETU;
	}
	AddXmlItemInt(tMesList.incontent, XML_KEY_CARDID,in_pack->lvol0);
	AddXmlItemStr(tMesList.incontent, XML_KEY_VERNUM, in_pack->sserial0);
	AddXmlItemInt(tMesList.incontent, XML_KEY_ADDDELSIGN,in_pack->lvol4);	//增删标志

	tMesList.funid = 930005;
	tMesList.level = 0;
	ret=AddMsgLst(&tMesList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	if(iRequest!=930005)
		return 0;
	ret=db_commit();
	if(ret)
	{
		writelog(LOG_ERR,"db_commit ret[%d]",ret);
		*pRetCode=E_DB_COMMIT;
		goto  L_RETU;
	}
	mesid=tMesList.mesid;
	des2src(out_pack->sdate0,in_pack->sdate0);
	for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++)
	{
		sleep(1);
		memset(&tMesList,0,sizeof(tMesList));
		ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList);
		if(ret)
		{
			writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret);
			*pRetCode=E_DB_MESLIST_R;
			goto L_RETU;
		}
	}
	switch(tMesList.ecode)
	{
		case 0:		//成功
			des2src(out_pack->vsvarstr0,"成功");
			break;
		case 9999:		//交易未处理
			des2src(out_pack->vsvarstr0,"前置机无应答");
			break;
		default:			//交易已经处理,但结果是失败
			des2src(out_pack->vsvarstr0,tMesList.emsg);
			break;
	}
	PutRow(handle,out_pack,pRetCode,szMsg);

	return 0;
L_RETU:
	return  -1;
}
Example #17
0
int F847108(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
	int card_id = 0;
	char logicdate[11]="";
	T_t_pif_card  card;

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

	ret=GetLogicDate(logicdate);								//业务日期
	if(ret)
	{
		*pRetCode=ret;
		goto L_RETU;
	}
	//修改原卡状态为发卡写卡失败状态
	card_id = in_pack->lvol0;

	if(in_pack->lvol0<1)
	{
		writelog(LOG_ERR,"in_pack->lserial1[%d]",in_pack->lvol0);
		*pRetCode=E_INPUT_CARDNO;
		goto L_RETU;
	}
	if(in_pack->lserial1<1)
	{
		writelog(LOG_ERR,"in_pack->lserial1[%d]",in_pack->lserial1);
		*pRetCode= E_INPUT_SERIALNO;
		goto L_RETU;
	}
	ret=DB_t_pif_card_read_lock_by_cur_and_card_id(card_id, &card);
	if(ret)
	{
		writelog(LOG_ERR,"card_id[%d]",card_id);
		if(DB_NOTFOUND==ret)
			*pRetCode= E_CARDNO_NOT_EXIST;
		else
			*pRetCode= E_DB_CARD_R;
		goto L_RETU;
	}
	card.state_id[CARDSTAT_TYPE_WFAIL]=STATE_TRUE;
	memset(card.comments,0,sizeof(card.comments));
	AddXmlItemStr(card.comments, XML_KEY_OPERATEDATE,logicdate);
	AddXmlItemInt(card.comments,XML_KEY_SERIALNO,in_pack->lserial1);
	AddXmlItemInt(card.comments,XML_KEY_TRADECODE,in_pack->lvol2);

	ret=DB_t_pif_card_update_lock_by_cur(&card);
	if(ret)
	{
		writelog(LOG_ERR,"card_id[%d]",card_id);
		if(DB_NOTFOUND==ret)
			*pRetCode= E_CARDNO_NOT_EXIST;
		else
			*pRetCode= E_DB_CARD_U;
		goto L_RETU;
	}
	DB_t_pif_card_free_lock_by_cur();
	return 0;
L_RETU:
	return -1;
}
Example #18
0
int F930013(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
 	int cnt=0;
	int mesid=0;
       T_t_tif_meslist tMesList;

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

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,0);
	memset(&tMesList,0,sizeof(tMesList));

	des2src(tMesList.devphy999_id, in_pack->sdate0);
	trim(tMesList.devphy999_id);
	if(strlen(tMesList.devphy999_id)==0)
	{
		*pRetCode=E_DEVPHYID_NULL;
		goto L_RETU;
	}

	AddXmlItemStr(tMesList.incontent, XML_KEY_STARTDT, in_pack->sopen_emp);
	AddXmlItemStr(tMesList.incontent, XML_KEY_ENDDT, in_pack->sclose_emp);
	AddXmlItemInt(tMesList.incontent, XML_KEY_RATION, in_pack->lvol4);
	AddXmlItemInt(tMesList.incontent, XML_KEY_CARDUSENUM, in_pack->lvol5);
	AddXmlItemStr(tMesList.incontent, XML_KEY_VCARDSET, in_pack->snote2);

	tMesList.funid = 930013;
	tMesList.level = 2;
	ret=AddMsgLst(&tMesList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	if(iRequest!=tMesList.funid)
		return 0;	
	ret=db_commit();
	if(ret)
	{
		writelog(LOG_ERR,"db_commit ret[%d]",ret);
		*pRetCode=E_DB_COMMIT;
		goto  L_RETU;
	}
	mesid=tMesList.mesid;
	des2src(out_pack->sdate0,in_pack->sdate0);
	for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++)
	{
		sleep(1);
		memset(&tMesList,0,sizeof(tMesList));
		ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList);
		if(ret)
		{
			writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret);
			*pRetCode=E_DB_MESLIST_R;
			goto L_RETU;
		}
	}
	switch(tMesList.ecode)
	{
		case 0:		//成功
			des2src(out_pack->vsvarstr0,"成功");
			break;
		case 9999:		//交易未处理
			des2src(out_pack->vsvarstr0,"前置机无应答");
			break;
		default:			//交易已经处理,但结果是失败
			des2src(out_pack->vsvarstr0,tMesList.emsg);				
			break;
	}	
	PutRow(handle,out_pack,pRetCode,szMsg);	
	return 0;
L_RETU:
	return  -1;	
}
Example #19
0
int F950040(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret,i,j;
	T_t_device tDevice;
	T_t_msglist tMsg;
	int retries = 0;
	int msgid;
	char cardgroup[257] = "";
	unsigned char out_data[128] = "";
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,0);
	
	memset(&tDevice,0,sizeof tDevice);
	

	if(rPack->lcert_code < 1)
	{
		return E_NOTEXIST_DEVICE;
	}
	if(strlen(rPack->vsvarstr0) != 254)
	{
		writelog(LOG_DEBUG,"card right [%s] ",rPack->vsvarstr0);
		return E_DEVICE_PARAM_ERR;
	}
	if((ret = DB_t_device_read_by_deviceid(rPack->lcert_code,&tDevice)))
	{
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_DEVICE,rPack->lcert_code);
		else
			return E_DB_DEVICE_R;

	}
	if(tDevice.status[0]!=STATUS_NORMAL)
	{
		return ERRINFO(E_NOTEXIST_DEVICE,tDevice.devphyid);
	}
	memset(&tMsg,0,sizeof tMsg);
	//cardgroup[0] = '0';
	strcpy(cardgroup,rPack->vsvarstr0);
	cardgroup[254] = '0';
	for(i = 0;i < 255;i+=8)
	{
		out_data[i/8] = 0;
		for(j = 0;j < 8;++j)
		{
			unsigned char t = (*(cardgroup+i+j) == '1') ? 1 : 0; 
			out_data[i/8] |= (t << (7-j)); 
		}
	}
	memset(cardgroup,0,sizeof cardgroup);
	for(i = 0,j = 0;i < 256 / 8;++i,j+=2)
	{
		sprintf(cardgroup+j,"%02X",out_data[i]);
	}
	cardgroup[256/4] = '\0';
	tMsg.funcno = 950040;
	tMsg.msglevel=1;
	tMsg.maxsendcnt = 1;
	//des2src(tMsg.devphyid,tDevice.devphyid);
	tMsg.deviceid= tDevice.deviceid;
	AddXmlItemStr(tMsg.reqdata,XML_KEY_CARDRIGHTTYPE,cardgroup);
	if((ret = AddMsgLst(&tMsg)))
	{
		return  ret;
	}
	strcpy(out_pack->vsvarstr0,"成功");
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
}
Example #20
0
int F950041(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret;
	T_t_pif_device tDevice;
	T_t_cif_shop_pos tShopPos;
	T_t_cif_shop tShop;
	T_t_tif_meslist tMsg;
	T_t_pif_feetype tFeeType;
	int rate = 0;
	int retries = 0;
	int msgid;
	unsigned char buf[32] = "";
	char cardlist[100] = "";
	int rows = 0;
	int i,j;

	memset(&tDevice,0,sizeof tDevice);
	memset(&tFeeType,0,sizeof tFeeType);
	
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	memset(&aPack,0,sizeof aPack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,F_VSMESS,0);
	
	if(rPack->lcert_code < 1)
	{
		*pRetCode = E_DEVICE_NOT_EXIST;
	}
	else if((ret = DB_t_pif_device_read_by_device_id(rPack->lcert_code,&tDevice)))
	{
		if(DB_NOTFOUND == ret)
			*pRetCode = E_DB_DEVICE_N;
		else
			*pRetCode = E_DB_DEVICE_R;

	}
	else if(tDevice.state_id == DEVISTAT_LOGOUT)
	{
		*pRetCode = E_DEVICE_NOT_EXIST;
	}
	// 如果是 39 的充值机
	else if(strcmp(tDevice.devtype,"0201") == 0 && tDevice.phytype == 1000)
	{
		des2src(rPack->sdate0,tDevice.devphy999_id);
		ret = F930006(handle,iRequest,rPack,pRetCode,szMsg);
		if(ret)	
		{
			goto LRet;
		}
		return 0;
	}
	else if((ret = DB_t_cif_shop_pos_open_select_by_c0_and_device_id(rPack->lcert_code)))
	{
		*pRetCode = E_DB_SHOP_POS_R;
	}
	else
	{
		
		while(1)
		{
			memset(&tShopPos,0,sizeof tShopPos);
			memset(&tShop,0,sizeof tShop);
			if((ret = DB_t_cif_shop_pos_fetch_select_by_c0(&tShopPos)))
			{
				if(ret == DB_NOTFOUND)
				{
					writelog(LOG_DEBUG,"shop doesn't find [%d]!");
					*pRetCode  = 0;
				}
				else
					*pRetCode = E_DB_SHOP_POS_R;
				break;
			}
			writelog(LOG_DEBUG,"find shop [%d]",tShopPos.shop_id);
			if((ret = DB_t_cif_shop_read_by_shop_id(tShopPos.shop_id,&tShop)))
			{
				*pRetCode = ret;
				break;
			}
			if('1' == tShop.is_leaf[0] && '1' == tShop.is_getfee[0]
				&& amtcmp(tShop.ratio,0.00)>0 )
			{
				writelog(LOG_DEBUG,"shop rate [%.02f]",tShop.ratio);
				int newrate = D2I(tShop.ratio * 100);
				if(newrate > rate)
					rate = newrate;
			}
		}
		
	}
	if(*pRetCode)
		return -1;
	
	ret = DB_t_pif_feetype_open_select_by_cur1();
	if(ret)
	{
		if(DB_NOTFOUND == ret)
			*pRetCode = E_DB_FEETYPE_N;
		else
			*pRetCode = E_DB_FEETYPE_R;
		return -1;
	}
	memset(buf,0,sizeof buf);
	while(1)
	{
		memset(&tFeeType,0,sizeof &tFeeType);
		ret = DB_t_pif_feetype_fetch_select_by_cur1(&tFeeType);
		if(ret)
		{
			if(DB_NOTFOUND == ret)
			{
				if(rows > 0)
					break;
				*pRetCode = E_DB_FEETYPE_N;
			}
			else
				*pRetCode = E_DB_FEETYPE_R;
		}
		rows++;
		if(tFeeType.fee_type < 0 || tFeeType.fee_type > 255
			|| tFeeType.is_outfee[0] != '1' )
			continue;
		writelog(LOG_DEBUG,"fee[%s][%d][%c]",tFeeType.fee_name,tFeeType.fee_type
			,tFeeType.is_outfee[0]);
		_SET_BIT(buf,tFeeType.fee_type-1);
		
	}
	//writelog(LOG_DEBUG,"bit length %d",BIT_LENGTH);
	memset(&tMsg,0,sizeof tMsg);
	tMsg.funid = 950041;
	tMsg.level = 1;
	tMsg.devid = tDevice.device_id;
	for(i = 0,j = 0;i < sizeof buf;++i)
	{
		j += sprintf(cardlist+j,"%02x",buf[i]);
	}
	AddXmlItemInt(tMsg.incontent,XML_KEY_FEE,rate);
	AddXmlItemStr(tMsg.incontent,XML_KEY_CARDRIGHTTYPE,cardlist);
	tMsg.max_send_cnt = 5;
	if((ret = AddMsgLst(&tMsg)))
	{
		*pRetCode = ret;
	}
	else
	{
		if(db_commit())
		{
			*pRetCode = E_DB_COMMIT;
			return -1;
		}
		retries = 10;
		msgid = tMsg.mesid;
		for(retries=0;(retries<10)&&(tMsg.ecode!=0);retries++)
		{
			memset(&tMsg,0,sizeof tMsg);
			ret = DB_t_tif_meslist_read_by_mesid(msgid,&tMsg);
			if(ret)
			{
				strcpy(out_pack->vsvarstr0,"读取指令失败");
				*pRetCode=E_DB_MESLIST_R;
				strcpy(szMsg,"读取指令失败");
				return -1;
			}
			// 等待1秒
			sleep(1);
		}
		switch(tMsg.ecode)
		{
			case 0:		//成功
				des2src(out_pack->vsmess,"成功");
				strcpy(szMsg,"成功");
				break;
			case 9999:		//交易未处理
				des2src(out_pack->vsmess,"前置机无应答");
				strcpy(szMsg,"前置机无应答");
				goto LRet;
			default:			//交易已经处理,但结果是失败
				des2src(out_pack->vsmess,tMsg.emsg);				
				goto LRet;
		}	

		PutRow(handle,out_pack,pRetCode,szMsg);
		AnswerData(handle,*pRetCode,szMsg);
		return 0;
		
	}
LRet:
	return -1;
}
Example #21
0
int DoFrozeCard(int cardno)
{
    int ret=0;
    CAccTrans *pAccTrans=CAccTrans::getInstance();
    TRANS& trans=pAccTrans->trans;

    T_t_card tCard;
    memset(&tCard,0,sizeof(tCard));
    ret=DB_t_card_read_lock_by_cur_and_cardno(cardno,&tCard);
    if(ret)
    {
        writelog(LOG_ERR,"cardno[%d]",cardno);
        if(DB_NOTFOUND==ret)
            return ERRINFO(E_NOTEXIST_CARDNO,cardno);
        else
            return E_DB_CARD_R;
    }
    des2src(trans.showcardno,tCard.showcardno);
    if(tCard.status[0]!=STATUS_NORMAL)
    {
        DB_t_card_free_lock_by_cur();
        return ERRINFO(E_CARD_LOGOUT,cardno);
    }
    if('1'==tCard.frozeflag[0])
    {
        DB_t_card_free_lock_by_cur();
        return ERRINFO(E_CARD_FREEZE,cardno);
    }
    tCard.frozeflag[0]='1';
    des2src(tCard.frozedate,trans.sysdate);
    ret=getCardVerNo(tCard.cardverno);
    if(ret)
    {
        DB_t_card_free_lock_by_cur();
        return ret;
    }
    getfmtsysdatetime(tCard.lastsaved);
    ret=DB_t_card_update_lock_by_cur(&tCard);
    if(ret)
    {
        writelog(LOG_ERR,"cardno[%d]",cardno);
        if(DB_NOTFOUND==ret)
            return E_NOTEXIST_CARDNO;
        else
            return E_DB_CARD_U;
    }
    T_t_customer customer;
    memset(&customer,0,sizeof(customer));
    if(tCard.custid)
    {
        ret=DB_t_customer_read_by_custid(tCard.custid,&customer);
        if(ret)
        {
            if(DB_NOTFOUND==ret)
                return E_NOTEXIST_CUSTOMER;
            else
                return E_DB_CUSTOMER_R;
        }
        trans.custid=tCard.custid;
        des2src(trans.custname,customer.custname);
    }
    //修改以前的解冻记录为删除状态
    UpdCardVerStatus(cardno,CARDVERTYPE_CARDUNFROZE);
    //更新系统黑名单最大版本号
    ret=SetSysParaVal(SYSPARA_MAXBLACKCARDVERNO,tCard.cardverno);
    if(ret)
    {
        return ret;
    }
    T_t_cardver cardver;
    memset(&cardver,0,sizeof(cardver));
    cardver.cardno=tCard.cardno;
    des2src(cardver.accdate,pAccTrans->trans.sysdate);
    cardver.termid=trans.termid;
    cardver.termseqno=trans.termseqno;
    cardver.cardno=tCard.cardno;
    des2src(cardver.cardphyid,tCard.cardphyid);
    des2src(cardver.stuempno,customer.stuempno);
    cardver.cardvertype=CARDVERTYPE_CARDFROZE;
    cardver.adddelflag[0]=ADDDELFLAG_ADD;
    cardver.status[0]=STATUS_NORMAL;
    des2src(cardver.cardverno,tCard.cardverno);
    ret=DB_t_cardver_add(&cardver);
    if(ret)
    {
        if(DB_REPEAT==ret)
            return E_DB_CARDVER_E;
        else
            return E_DB_CARDVER_I;
    }
    T_t_msglist tMsgList;
    memset(&tMsgList,0,sizeof(tMsgList));
    AddXmlItemInt(tMsgList.reqdata, XML_KEY_CARDID,tCard.cardno);
    AddXmlItemStr(tMsgList.reqdata, XML_KEY_VERNUM,tCard.cardverno);
    AddXmlItemInt(tMsgList.reqdata, XML_KEY_ADDDELSIGN,0);	//增删标志

    tMsgList.funcno = 930005;
    tMsgList.pfuncno = 846307;
    tMsgList.msglevel = MESLIST_PRIORITY_REALTIME;
    tMsgList.msgtype = MESLIST_TYPE_ORDER;
    ret=AddMsgLst(&tMsgList);
    if(ret)
    {
        writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
        return ret;
    }
    des2src(trans.summary,cardver.cardverno);
    return 0;
}
Example #22
0
int F930021(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret = 0;
	int cnt=0;
	int mesid=0;
     	T_t_tif_meslist tMesList;
	T_t_pif_device	tDevice;
	T_t_pif_device tPDev;

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

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,0);
	memset(&tMesList,0,sizeof(tMesList));
	memset(&tDevice,0,sizeof(tDevice));
	memset(&tPDev,0,sizeof tPDev);


	if(strlen(in_pack->sdate0)==0)
	{
		*pRetCode=E_DEVPHYID_NULL;
		goto L_RETU;
	}
	ret=get_devinfo_by_phyid(in_pack->sdate0,&tDevice);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"get_devinfo_by_phyid err[%d]",ret);
		goto L_RETU;
	}

	if((ret = get_devinfo_by_phyid(tDevice.fdev_id,&tPDev)))
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	AddXmlItemStr(tMesList.incontent,XML_KEY_DEV999_ID, tDevice.dev999_id);
	AddXmlItemInt(tMesList.incontent,XML_KEY_DEV999_NO,  tDevice.dev999_no);
	AddXmlItemStr(tMesList.incontent,XML_KEY_DEVTYPE,tDevice.devtype);
	AddXmlItemStr(tMesList.incontent,XML_KEY_DEVVERSION, tDevice.devversion);
	AddXmlItemStr(tMesList.incontent,XML_KEY_CARDSTR, tDevice.cardstr);
	AddXmlItemStr(tMesList.incontent,XML_KEY_VCARDSET, tDevice.cardtype);
	AddXmlItemInt(tMesList.incontent, XML_KEY_PORTCOUNT, tDevice.portcount);
	AddXmlItemStr(tMesList.incontent, XML_KEY_FDEVPHY_ID, tPDev.dev999_id);
	AddXmlItemInt(tMesList.incontent, XML_KEY_PORTNO,tDevice.portno);
	AddXmlItemInt(tMesList.incontent, XML_KEY_STATE_ID, tDevice.state_id);
	AddXmlItemInt(tMesList.incontent,XML_KEY_JOINMODE,tDevice.joinmode);
	AddXmlItemStr(tMesList.incontent, XML_KEY_COMADD, tDevice.comadd);
	AddXmlItemStr(tMesList.incontent, XML_KEY_PORT,  tDevice.port);
	AddXmlItemInt(tMesList.incontent, XML_KEY_BAUDRATE, tDevice.baudrate);
	AddXmlItemInt(tMesList.incontent, XML_KEY_COMTYPE,tDevice.comtype);
	AddXmlItemStr(tMesList.incontent, XML_KEY_NOTVALIDITY, tDevice.bsheetvdate);
	AddXmlItemStr(tMesList.incontent, XML_KEY_VERNUM,tDevice.bsheetver);
	AddXmlItemInt(tMesList.incontent, XML_KEY_LASTTRASERNO, tDevice.lasttraserno);
	AddXmlItemStr(tMesList.incontent, XML_KEY_LASTTRADATE, tDevice.lasttradate);
	AddXmlItemInt(tMesList.incontent, XML_KEY_LASTSHUTSERNO, tDevice.lastshutserno);
	AddXmlItemStr(tMesList.incontent, XML_KEY_LASTSHUTDATE, tDevice.lastshutdate);
	tMesList.devid = tDevice.device_id;
	tMesList.funid = 930021;
	tMesList.level = 3;
	ret=AddMsgLst(&tMesList);
	if(ret)
	{
		*pRetCode=ret;
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		goto L_RETU;
	}
	if(iRequest!=tMesList.funid)
		return 0;	
	ret=db_commit();
	if(ret)
	{
		writelog(LOG_ERR,"db_commit ret[%d]",ret);
		*pRetCode=E_DB_COMMIT;
		goto  L_RETU;
	}
	mesid=tMesList.mesid;
	des2src(out_pack->sdate0,in_pack->sdate0);
	for(cnt=0;(cnt<10)&&(tMesList.ecode!=0);cnt++)
	{
		sleep(1);
		memset(&tMesList,0,sizeof(tMesList));
		ret=DB_t_tif_meslist_read_by_mesid(mesid, &tMesList);
		if(ret)
		{
			writelog(LOG_ERR,"DB_t_tif_meslist_read_by_mesid err[%d]",ret);
			*pRetCode=E_DB_MESLIST_R;
			goto L_RETU;
		}
	}
	switch(tMesList.ecode)
	{
		case 0:		//成功
			des2src(out_pack->vsvarstr0,"成功");
			break;
		case 9999:		//交易未处理
			des2src(out_pack->vsvarstr0,"前置机无应答");
			break;
		default:			//交易已经处理,但结果是失败
			des2src(out_pack->vsvarstr0,tMesList.emsg);				
			break;
	}	
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
L_RETU:
	return  -1;	
}
Example #23
0
int F950040(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{
	int ret,i,j;
	T_t_pif_device tDevice;
	T_t_tif_meslist tMsg;
	int retries = 0;
	int msgid;
	char cardgroup[257] = "";
	char out_data[128] = "";
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);

	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSVARSTR0,0);
	
	memset(&tDevice,0,sizeof tDevice);
	

	if(rPack->lcert_code < 1)
	{
		*pRetCode = E_DEVICE_NOT_EXIST;
	}
	else if(strlen(rPack->vsvarstr0) != 254)
	{
		writelog(LOG_DEBUG,"card right [%s] ",rPack->vsvarstr0);
		*pRetCode = E_DEVICE_PARAM_ERR;
	}
	else if((ret = DB_t_pif_device_read_by_device_id(rPack->lcert_code,&tDevice)))
	{
		*pRetCode = ret;

	}
	else if(tDevice.state_id == DEVISTAT_LOGOUT)
	{
		*pRetCode = E_DEVICE_NOT_EXIST;
	}
	else
	{
		memset(&tMsg,0,sizeof tMsg);
		tMsg.funid = 950040;
		if(tDevice.phytype != 1000)
		{
			//cardgroup[0] = '0';
			strcpy(cardgroup,rPack->vsvarstr0);
			cardgroup[254] = '0';
			for(i = 0;i < 255;i+=8)
			{
				out_data[i/8] = 0;
				for(j = 0;j < 8;++j)
				{
					char t = (*(cardgroup+i+j) == '1') ? 1 : 0; 
					out_data[i/8] |= (t << (7-j)); 
				}
			}
			memset(cardgroup,0,sizeof cardgroup);
			for(i = 0,j = 0;i < 256 / 8;++i)
			{
				j += sprintf(cardgroup+j,"%02X",out_data[i]);
			}
			cardgroup[256/4] = '\0';
		}
		else
		{
			// 三九智慧设备
			cardgroup[0] = '0';
			strcat(cardgroup,rPack->vsvarstr0);
			cardgroup[255] = '0';
		}
		tMsg.max_send_cnt = 1;
		//des2src(tMsg.devphy999_id,tDevice.devphy999_id);
		tMsg.devid = tDevice.device_id;
		AddXmlItemStr(tMsg.incontent,XML_KEY_CARDRIGHTTYPE,cardgroup);
		if((ret = AddMsgLst(&tMsg)))
		{
			*pRetCode = ret;
		}
		else
		{
			if(db_commit())
			{
				*pRetCode = E_DB_COMMIT;
				return -1;
			}
			msgid = tMsg.mesid;
			retries = 3;
			sleep(2);
			while(retries-- > 0)
			{
				memset(&tMsg,0,sizeof tMsg);
				ret = DB_t_tif_meslist_read_by_mesid(msgid,&tMsg);
				if(!ret)
				{
					if(0 == tMsg.ecode)
					{
						des2src(out_pack->vsvarstr0,tMsg.emsg);
						ret = 0;
						break;
					}
					else if(9999 == tMsg.ecode)
					{
						des2src(out_pack->vsvarstr0,"前置机无应答");
					}
					else
					{
						des2src(out_pack->vsvarstr0,tMsg.emsg);
					}
				}
				else
				{
					strcpy(out_pack->vsvarstr0,"读取指令失败");
				}
				sleep(1);
			}
			*pRetCode = 0;
			PutRow(handle,out_pack,pRetCode,szMsg);
		}
	}
	if(*pRetCode == 0 )
	{
		AnswerData(handle,*pRetCode,szMsg);
		return 0;
	}
	return -1;
}
Example #24
0
int F847104(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg)
{

	int ret =0;
	int len = 0;
	int i=0;
	int hi_cutid=0;
	char h_showcardid[11] = "";						//显示卡号
	char h_password[7] = "";							//卡密码
	double h_temp_Card_id = 0;						//卡号
	double dSerialNo=0;
	char seed_key[17] = "";							//种子密钥
	char card_endtime[8 + 1] = "";						//卡的有效截至日期
	char logicdate[11]="";								//业务日期
	char sysdate[11]="";
	char systime[9]="";
	char sEndDate[9]="";
	char sMsg[256]="";
	char sMaxCardBalance[20]="";
	char lost_date[11]="";
	char buf[64] = "";
	int write_failed = 0;
	double dMaxCardBalance=0;
	int lost_card_id=0;
	T_t_pif_card		tCard;
	T_t_pif_card		tOldCard;
	T_t_cif_customer 	tCustomer;
	T_t_pif_spefee 	tSpeFee;
    //	T_t_pif_cardlossinfo tCardLossInfo;
	T_t_tif_tradeserial  tradeserial;
	T_t_aif_account tAccount;
	InAcc  IA;
	ST_CPACK aPack;
	ST_PACK *out_pack = &(aPack.pack);
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_LVOL0,F_LVOL1,F_LVOL5,
           F_SCUST_NO,	F_SCUST_NO2,F_SCUST_AUTH,F_SCUST_AUTH2,
           F_SDATE0,F_SNAME,F_SNAME2,
           F_SOPEN_EMP,F_SSTATUS0,
           F_DAMT2,F_LSERIAL1,F_VSMESS,0);

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

	getsysdate(sysdate);
	getsystime(systime);
	ret=GetLogicDate(logicdate);										//业务日期
	if(ret)
	{
		*pRetCode=ret;
		goto L_RETU;
	}
	//检查客户信息,判断是否可以发行卡
	hi_cutid=rPack->lvol0;									//客户号
	des2src(tCard.physical_no, rPack->sbank_acc);				//物理卡号
	trim(h_showcardid);
	ret=IsExistFreezeCardByCustomId(hi_cutid);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	ret=IsExistNoLostCardByCustomId(hi_cutid);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	if(strlen(h_showcardid))
	{
		ret=IsExistShowCardNo(h_showcardid);
		if(ret)
		{
			*pRetCode = ret;
			goto L_RETU;
		}
	}
	ret=IsExistCardByPhyCardNo(tCard.physical_no);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	ret=GetLostCardIdByCustomId_TypeId(hi_cutid,CT_NORMAL,&lost_card_id);
	if(ret)
	{
		writelog(LOG_ERR,"customer[%d]tCard type_id[%d]",hi_cutid,CT_NORMAL);
		*pRetCode = ret;
		goto L_RETU;
	}

    /*
      ret=DB_t_pif_cardlossinfo_read_by_card_id_and_state_id(lost_card_id, STATE_VALID, &tCardLossInfo);
      if(ret)
      {
      writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id);
      if(DB_NOTFOUND==ret)
      *pRetCode =  E_CARDNO_NOT_EXIST;
      else
      *pRetCode =  E_DB_CARD_R;
      goto L_RETU;
      }
    */
	ret=get_latest_lost_date_by_card_no(lost_card_id,lost_date);
	if(ret)
	{
		writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id);
		*pRetCode =ret;
		goto L_RETU;
	}
	//先检查客户的挂失的正式卡是否到了补办日期
	ret=GetLostCardValiddate(lost_date,sEndDate);
	if(ret)
	{
		*pRetCode =ret;
		goto L_RETU;
	}

	if(strncmp(sEndDate,sysdate,8)>0)
	{
		writelog(LOG_ERR,"lost_normal_card_id[%d]lost_date[%s]end_date[%s]",lost_card_id,lost_date,sEndDate);
		*pRetCode =  E_NORMALCARD_NOT_REACH_ENDDATE;
		goto L_RETU;
	}
    /*
	//更新卡挂失日期表中该卡状态为无效
	ret=UpdateCardLossInfoState(lost_card_id,STATE_VALID,STATE_INVALID);
	if(ret)
	{
    *pRetCode = ret;
    goto L_RETU;
	}
    */
	//注销原卡
	ret=DB_t_pif_card_read_lock_by_cur_and_card_id(lost_card_id,&tOldCard);
	if(ret)
	{
		writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id);
		if(DB_NOTFOUND==ret)
			*pRetCode = E_CARDNO_NOT_EXIST;
		else
			*pRetCode =  E_DB_CARD_R;
		goto L_RETU;
	}
	if(tOldCard.state_id[CARDSTAT_TYPE_WFAIL] == STATE_TRUE
		&& tOldCard.is_managefee[0] == CARDWFAIL_WATER )
	{
		// 转账的时候写卡失败
		write_failed = 1;
	}
	else
	{
		des2src(tCard.state_id,CARDSTAT_REG);			//卡状态
	}
	des2src(tOldCard.state_id,CARDSTAT_LOGOUT);		//注销
	des2src(tOldCard.end_time,sysdate);					//注销日期
	ret=DB_t_pif_card_update_lock_by_cur(&tOldCard);
	if(ret)
	{
		writelog(LOG_ERR,"lost_card_id[%d]",lost_card_id);
		if(DB_NOTFOUND==ret)
			*pRetCode =   E_CARDNO_NOT_EXIST;
		else
			*pRetCode =  E_DB_CARD_R;
		goto L_RETU;
	}
	DB_t_pif_card_free_lock_by_cur();

	if(write_failed)
	{
		ret = GetXmlValue(tOldCard.comments,sizeof buf,XML_KEY_SERIALNO2,buf);
		if(ret)
		{
			*pRetCode = ret;
			goto L_RETU;
		}
		AddXmlItemStr(tCard.comments,XML_KEY_SERIALNO2,buf);
		ret = GetXmlValue(tOldCard.comments,sizeof buf,XML_KEY_OPERATEDATE2,buf);
		if(ret)
		{
			*pRetCode = ret;
			goto L_RETU;
		}
		AddXmlItemStr(tCard.comments,XML_KEY_OPERATEDATE2,buf);
		ret = GetXmlValue(tOldCard.comments,sizeof buf,XML_KEY_TRADECODE2,buf);
		if(ret)
		{
			*pRetCode = ret;
			goto L_RETU;
		}
		AddXmlItemStr(tCard.comments,XML_KEY_TRADECODE2,buf);
		tCard.is_managefee[0] = CARDWFAIL_WATER;
	}

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

	tradeserial.trade_fee =D4U5(rPack->damt0,2);
	//	准备数据插入卡信息表
	memcpy(seed_key,STATIC_SEED_KEY,16);			//读种子密钥
	if(strlen(tCustomer.can_time)==8)
	{
		ret=IsInvalidDateTime(tCustomer.can_time,"YYYYMMDD");
		if(ret)
		{
			*pRetCode=E_TB_CUSTOMER_ENDTIME;
			goto L_RETU;
		}
		if(strncmp(tCustomer.can_time,sysdate,8)<=0)
		{
			*pRetCode=E_TB_CUSTOMER_ENDTIME;
			goto L_RETU;
		}
		des2src(card_endtime,tCustomer.can_time);
	}
	else if(strlen(rPack->sdate0)==0)
	{
		*pRetCode=E_TB_CUSTOMER_NO_ENDTIME;
		goto L_RETU;
	}
	else
	{
		ret=IsInvalidDateTime(rPack->sdate0,"YYYYMMDD");
		if(ret)
		{
			*pRetCode = E_INPUT_DATE;
			goto L_RETU;
		}
		if(strncmp(rPack->sdate0,sysdate,8)<=0)
		{
			*pRetCode=E_INPUT_DATE;
			goto L_RETU;
		}
		des2src(card_endtime,rPack->sdate0);
	}

	tradeserial.trade_fee = rPack->damt0;								//金额
	tradeserial.other_seri_no = 0;										//上传端流水号
	tradeserial.serial_state = SERISTAT_DEBT;								//流水状态
	des2src(tradeserial.operate_date,sysdate);							//发生日期
	des2src(tradeserial.operate_time,systime);							//发生时间
	des2src(tradeserial.collect_date,sysdate);								//采集日期
	des2src(tradeserial.collect_time,systime);								//采集时间
	des2src(tradeserial.enteract_date,logicdate);							//处理日期
	des2src(tradeserial.enteract_time,systime);							//处理时间
	tradeserial.maindevice_id = rPack->lvol6;								//上传工作站标识
	tradeserial.device_id = rPack->lvol7;									//采集设备标识
	tradeserial.purse_id = PURSE_NO_ONE;								//钱包号
	tradeserial.customer_id = tCustomer.cut_id;							//客户标识
	tradeserial.sys_id = 0;												//外部系统标识
	des2src(tradeserial.oper_code, rPack->scust_limit);					//操作员号

	len=strlen(tCustomer.man_id) ;
	if (len >= 6)
	{
		strncpy(h_password,&(tCustomer.man_id[len-6]),6);
		if(h_password[5]>'9'||h_password[5]<'0')
			h_password[5]='0';
	}
	else
	{
		strcpy(h_password,"666666");
	}
	ret = getNewUniqNo(KEYTYPE_CARD_ID,&h_temp_Card_id);						//获取最大卡号
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	tCard.card_id = (int)h_temp_Card_id;											//卡号
	des2src(tCard.showid,h_showcardid);										//显示卡号
	des2src(tCard.is_main,TYPE_YES);  											//是否为主卡
	tCard.type_id = CT_NORMAL;													//卡类别
	EncodePwd(seed_key,h_password,tCard.password,0);							//卡密码
	tCard.cosumer_id = hi_cutid;													//客户标识
	tCard.account_count = ACCOUNT_COUNT_ONE;									//卡对应帐户个数
	des2src(tCard.begin_time,sysdate);											//注册时间
	des2src(tCard.end_time, card_endtime);										//截至时间

	tCard.phytype = PHYTYPE_NO_ONE;											//设备物理型号;默认为1
	//	插入卡信息
	ret = DB_t_pif_card_add(&tCard);
	if (ret)
	{
		if(DB_REPEAT==ret)
			*pRetCode = E_DB_CARD_E;
		else
			*pRetCode = E_DB_CARD_I;
		goto L_RETU;
	}
	//修改帐户表中对应的卡号,类型,状态
	ret=DB_t_aif_account_read_lock_by_c0_and_card_id_and_purse_id(lost_card_id,PURSE_NO_ONE,&tAccount);
	if (ret)
	{
		writelog(LOG_ERR,"normalcard_account_id[%s]",lost_card_id);
		if(DB_NOTFOUND==ret)
			*pRetCode =  E_ACTNO_NOT_EXIST;
		else
			*pRetCode =  E_DB_ACCOUNT_R;
	}
	if(tAccount.current_state!=1)
	{
		*pRetCode=E_ACTNO_LOGOUT;
		goto L_RETU;
	}
	tAccount.card_id=tCard.card_id;
	tAccount.card_balance=tAccount.cur_freebala;			//更新卡余额与库余额一致
	tAccount.consume_count=0;
	ret=DB_t_aif_account_update_lock_by_c0(&tAccount);
	if (ret)
	{
		writelog(LOG_ERR,"DB_t_aif_account_update_lock_by_cur4 ret[%d]account_id[%s]",ret,tAccount.account_id);
		if(DB_NOTFOUND==ret)
			*pRetCode =   E_ACTNO_EXIST;
		else
			*pRetCode =  E_DB_ACCOUNT_U;
	}
	DB_t_aif_account_free_lock_c0();

	ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&dSerialNo);  						//获得最大流水号
	if(ret)
	{
		*pRetCode=ret;
		goto L_RETU;
	}
	tradeserial.serial_no=(int)dSerialNo;
	tradeserial.serial_type=TXCODE_CHANGE_CARD;
	tradeserial.card_id=tCard.card_id;				//新卡号
	des2src(tradeserial.showid,tCard.showid);			//显示卡号

	strcpy(IA.sArrInActno[0],tAccount.account_id);		//账号
	IA.dArrInAmt[0]=tradeserial.trade_fee;			//交易金额
	IA.iUseCardFlag=USE_CARD_TYPE_ONLINE;		//联机交易
	IA.dInCardBala=tAccount.cur_freebala;			//入卡值
	IA.iTxCnt=1;
	IA.iCardNo=tCard.card_id;
	IA.iFeeType=tCustomer.fee_type;
	IA.iArrInFeeSwitch[0]=rPack->lvol0;
	IA.iArrInFeeSwitch[1]=rPack->lvol1;
	IA.iArrInFeeSwitch[2]=rPack->lvol2;
	IA.iArrInFeeSwitch[3]=rPack->lvol3;
	IA.iArrInFeeSwitch[4]=rPack->lvol4;
	IA.iArrInFeeSwitch[5]=rPack->lvol5;
	IA.iArrInFeeSwitch[6]=rPack->lvol6;
	IA.iArrInFeeSwitch[7]=rPack->lvol7;
	IA.iArrInFeeSwitch[8]=rPack->lvol8;
	IA.iArrInFeeSwitch[9]=rPack->lvol9;
	IA.iArrInFeeSwitch[10]=rPack->lvol10;
	ret=process(&IA,&tradeserial);
	if(ret)
	{
		writelog(LOG_ERR,"process ret[%d]",ret);
		*pRetCode=ret;
		goto L_RETU;
	}
	sprintf(out_pack->vsmess,"流水号:%d 卡号:%d ",IA.iSerialNo,IA.iCardNo);
	for(i=1;i<=IA.iOutTxTypeCnt;i++)
	{
		switch(IA.iArrOutTxType[i])
		{
	        case TXTYPE_TOLL_DEPOSIT:
	        case TXTYPE_DEDUCT_DEPOSIT:
	        case TXTYPE_RETURN_DEPOSIT:
	            tradeserial.deposit_fee=IA.dArrOutAmt[i];
	            break;
	        case TXTYPE_PRE_TOLL_BOARD:
	        case TXTYPE_TOLL_BOARD:
	        case TXTYPE_DEDUCT_BOARD:
	        case TXTYPE_RETURN_BOARD:
	            tradeserial.boardfee=IA.dArrOutAmt[i];
	            break;
	        case TXTYPE_TOLL_CHARGE:
	            tradeserial.in_fee=IA.dArrOutAmt[i];
	            break;
	        case TXTYPE_TOLL_CARDCOST:
	            tradeserial.cost_fee=IA.dArrOutAmt[i];
	            break;
	        default:
	            break;
		}
		if(amtcmp(IA.dArrOutAmt[i],0)!=0)
		{
			sprintf(sMsg,"%s:%.2lf元 ",IA.sArrOutTxName[i],IA.dArrOutAmt[i]);
			strcat(out_pack->vsmess,sMsg);
		}
	}
	sprintf(sMsg,"卡当前余额:%.2lf元",tradeserial.out_balance);
	strcat(out_pack->vsmess,sMsg);
	writelog(LOG_DEBUG,out_pack->vsmess);
	ret = DB_t_tif_tradeserial_add(&tradeserial);
	if (ret)
	{
		writelog(LOG_ERR,"ret[%d]",ret);
		if(DB_REPEAT==ret)
			*pRetCode = E_DB_TRADESERIAL_E;
		else
			*pRetCode = E_DB_TRADESERIAL_I;
		goto L_RETU;
	}
	if(amtcmp(tradeserial.out_balance,0)<0)
	{
		*pRetCode=E_ENTER_ACCOUNT;
		goto L_RETU;
	}
	//检查金额是否超过最大额度
	ret=GetParameter(GLOBE_MAXCARDBALANCE,sMaxCardBalance);
	if(ret)
	{
		*pRetCode=ret;
		goto L_RETU;
	}
	dMaxCardBalance=atof(sMaxCardBalance);
	if(amtcmp(tradeserial.out_balance,dMaxCardBalance)>0)
	{
		writelog(LOG_ERR,"tradeserial.out_balance[%lf]",tradeserial.out_balance);
		*pRetCode=E_AMT_EXCEED_MAX;
		goto L_RETU;
	}
	// 增加发行新卡时的门禁名单表检查
	ret = CheckNewCardHook(&tCustomer, tCard.card_id);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	//返回卡号\密码\显示卡号\客户类型\图书证号\有效截至日期
	out_pack->lvol0 = (int)h_temp_Card_id;						//交易卡号
	out_pack->lvol1 = tCustomer.cut_type;						//客户类别
	out_pack->lvol5 = tCustomer.fee_type;						//收费类别
	des2src(out_pack->scust_no,h_showcardid);					//显示卡号
	des2src(out_pack->scust_no2,tCustomer.classdept_no);			//部门号
	des2src(out_pack->scust_auth,tCustomer.stuemp_no);			//学号
	des2src(out_pack->scust_auth2,tCustomer.man_id);			//身份证号
	des2src(out_pack->sname,tCustomer.cut_name);				//客户姓名
	des2src(out_pack->sname2,tCustomer.lib_cardid);				//图书证号
	des2src(out_pack->sstatus0,tCustomer.sex);					//性别
	des2src(out_pack->sopen_emp,h_password);					//卡密码
	des2src(out_pack->sdate0,card_endtime);					//有效截至日期

	out_pack->damt2=tradeserial.out_balance;					//出卡值
	out_pack->lserial1=tradeserial.serial_no;						//流水号
	// add by 汤成 2005-8-8
	// 增加向名单表写入记录
	ret = InsertToBlkList((int)h_temp_Card_id,CHCARD_BLACKLIST);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	PutRow(handle,out_pack,pRetCode,szMsg);
	return 0;
  L_RETU:
	return -1;
}
Example #25
0
int DoUnlossCard(int cardno)
{
    int ret=0;
    T_t_card tCard;
    CAccTrans *pAccTrans=CAccTrans::getInstance();
    TRANS& trans=pAccTrans->trans;
    trans.transcode=TC_CARDUNLOSS;

    memset(&tCard,0,sizeof(tCard));
    ret=DB_t_card_read_lock_by_cur_and_cardno(cardno,&tCard);
    if (ret)
    {
        writelog(LOG_ERR,"cardno[%d]",cardno);
        if (DB_NOTFOUND==ret)
            return ERRINFO(E_NOTEXIST_CARDNO,cardno);
        else
            return E_DB_CARD_R;
    }
	des2src(trans.showcardno,tCard.showcardno);
	if(tCard.status[0]!=STATUS_NORMAL)
	{
		DB_t_card_free_lock_by_cur();
		return ERRINFO(E_CARD_LOGOUT,trans.cardno);
	}	
//	if('1'!=tCard.lossflag[0])
//	{
//		DB_t_card_free_lock_by_cur();
//		return ERRINFO(E_CARDNO_NOLOST,trans.cardno);
//	}	
	if('1'==tCard.frozeflag[0])
	{
		DB_t_card_free_lock_by_cur();
		ERRTIP("请先解冻后再解挂");
		return ERRINFO(E_CARD_FREEZE,trans.cardno);
	}
	if('1'==tCard.badflag[0])
	{
		DB_t_card_free_lock_by_cur();
		return ERRINFO(E_CARD_BADRECORD,trans.cardno);
	}	
	//判断是否存在过渡临时卡
	if(CARDTYPE_TEMP!=tCard.cardtype)
	{
		ret=IsExistNormalTmpCardByCustid(tCard.custid);
		if(ret)
		{
			DB_t_card_free_lock_by_cur();
			if(DB_EXIST==ret)
			{
				//锁定该卡,该卡只能销户
				ERRTIP("该客户存在卡状态正常的过渡临时卡,请先退掉过卡状态正常的渡临时卡再解挂");
				return E_EXIST_NORMALCARD;
			}
			else
				return ret;
		}
	}
	else
	{
		//检查是否存在其他正常的卡
		ret=IsExistOtherNormalCardByCustid(tCard.custid,tCard.cardno);
		if(ret)
		{
			if(DB_EXIST==ret)
			{
				//锁定该卡,该卡只能销户
				TIPINFO("该客户存在卡状态正常的其他卡,该卡解挂后将不能再使用,请解挂后注销该卡!");
				tCard.lockflag[0]='1';		
				des2src(tCard.lockdate,trans.accdate);
			}
			else
			{	
				DB_t_card_free_lock_by_cur();
				return ret;
			}
		}
	}
	tCard.lossflag[0]='0';
    tCard.lossdate[0]=0;
    ret=getCardVerNo(tCard.cardverno);
    if (ret)
    {		
		DB_t_card_free_lock_by_cur();
        return ret;
    }
    des2src(tCard.lastsaved,trans.sysdatetime);
    ret=DB_t_card_update_lock_by_cur(&tCard);
    if (ret)
    {
        writelog(LOG_ERR,"cardno[%d]",tCard.cardno);
        if (DB_NOTFOUND==ret)
            return E_NOTEXIST_CARDNO;
        else
            return E_DB_CARD_U;
    }
	T_t_customer customer;
	memset(&customer,0,sizeof(customer));
    if (tCard.custid)
    {
        ret=DB_t_customer_read_by_custid(tCard.custid,&customer);
        if (ret)
        {
            if (DB_NOTFOUND==ret)
                return E_NOTEXIST_CUSTOMER;
            else
                return E_DB_CUSTOMER_R;
        }
        trans.custid=tCard.custid;
        des2src(trans.custname,customer.custname);
        des2src(trans.stuempno,customer.stuempno);
    }
    UpdCardVerStatus(cardno,CARDVERTYPE_CARDLOSS);
	if('1'==tCard.lockflag[0])
	{
		//不下发名单
		strcpy(trans.summary,"000101010101");
		return 0;
	}
	//更新系统黑名单最大版本号
	ret=SetSysParaVal(SYSPARA_MAXBLACKCARDVERNO,tCard.cardverno);
	if(ret)
	{
		return ret;
	}
    T_t_cardver cardver;
    memset(&cardver,0,sizeof(cardver));
    cardver.cardno=tCard.cardno;
    des2src(cardver.accdate,pAccTrans->trans.accdate);
    cardver.termid=trans.termid;
    cardver.termseqno=trans.termseqno;
    cardver.cardno=tCard.cardno;
    des2src(cardver.cardphyid,tCard.cardphyid);
	des2src(cardver.stuempno,customer.stuempno);	
    cardver.cardvertype=CARDVERTYPE_CARDUNLOSS;
    cardver.adddelflag=ADDDELFLAG_DEL;
    cardver.status[0]=STATUS_NORMAL;
    des2src(cardver.cardverno,tCard.cardverno);
    ret=DB_t_cardver_add(&cardver);
    if (ret)
    {
        if (DB_REPEAT==ret)
            return E_DB_CARDVER_E;
        else
            return E_DB_CARDVER_I;
    }
    des2src(trans.summary,cardver.cardverno);
	char broadcastblkflag[20]={0};
	ret=GetSysParaVal(SYSPARA_BROADCASTBLKLIST,broadcastblkflag);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return 0;
		else
			return E_DB_SYSKEY_R;
	}
	if(broadcastblkflag[0]!='1')
		return 0;
	T_t_msglist tMsgList;
	memset(&tMsgList,0,sizeof(tMsgList));
	AddXmlItemInt(tMsgList.reqdata, XML_KEY_CARDID,tCard.cardno);
	AddXmlItemStr(tMsgList.reqdata, XML_KEY_VERNUM,tCard.cardverno);
	AddXmlItemInt(tMsgList.reqdata, XML_KEY_ADDDELSIGN,1);	//增删标志

	tMsgList.funcno = 930005;
	tMsgList.pfuncno = 846307;
	tMsgList.msglevel = MESLIST_PRIORITY_REALTIME;
	tMsgList.msgtype = MESLIST_TYPE_ORDER;
	ret=AddMsgLst(&tMsgList);
	if(ret)
	{
		writelog(LOG_ERR,"AddMsgLst err[%d]",ret);
		return ret;
	}
    return 0;
}