Exemple #1
0
static int doCard(TRANS& trans,T_t_card& tCard)
{

	int ret=0;

	ret=DB_t_card_read_lock_by_cur_and_cardno(trans.cardno,&tCard);
	if(ret)
	{
		writelog(LOG_ERR,"cardno[%d]",trans.cardno);
		if(DB_NOTFOUND==ret)
			return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno);
		else 
			return E_DB_CARD_R;
	}
	if(tCard.status[0]!=STATUS_NORMAL)
	{
		DB_t_card_free_lock_by_cur();
		return ERRINFO(E_CARD_LOGOUT,trans.cardno);
	}	
	if('1'==tCard.frozeflag[0])
	{
		DB_t_card_free_lock_by_cur();
		return ERRINFO(E_CARD_FREEZE,trans.cardno);
	}
	if('1'==tCard.lossflag[0])
	{
		DB_t_card_free_lock_by_cur();
		return ERRINFO(E_CARD_LOST,trans.cardno);
	}	
	if('1'==tCard.badflag[0])
	{
		DB_t_card_free_lock_by_cur();
		return ERRINFO(E_CARD_BADRECORD,trans.cardno);
	}	
		//比较卡物理ID是否相同
	if(strcmp(tCard.cardphyid,trans.cardphyid)!=0)
	{
		writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid);
		DB_t_card_free_lock_by_cur();
		return ERRINFO(E_CARD_PHYNO_DIFFER,trans.cardphyid,tCard.cardphyid);
	}
	//回收卡
	T_t_cardtype tCardType;

	memset(&tCardType,0,sizeof(tCardType));
		
	ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardType);
	if(tCardType.recycleable[0]!='1')
	{
		DB_t_card_free_lock_by_cur();
		return	ERRINFO(E_CARDTYPE_CANNOT_REUSE,tCardType.cardtype);
	}
	if(tCardType.fixdaycnt<1)
	{
		DB_t_card_free_lock_by_cur();		
		return ERRINFO(E_NOSET_CARDTYPE_VALIDDAYS,tCardType.cardtype);
	}
	ret=calcEndDate(trans.transdate,tCardType.fixdaycnt,tCard.expiredate);
	if(ret)
	{
		DB_t_card_free_lock_by_cur();		
		return ret;
	}
	char cardpwd[33]="";
	char key[17]="";
	get_init_passwd_by_man_id("",cardpwd);
	strcpy(key,STATIC_SEED_KEY);
	EncodePwd(key,cardpwd,tCard.cardpwd, 0);
//	memset(tCard.cardstatus,'0',sizeof(tCard.cardstatus));
	des2src(tCard.lastsaved,trans.sysdatetime);

	ret=DB_t_card_update_lock_by_cur(&tCard);
	if(ret)
	{
		if(DB_NOTFOUND==ret)
			return E_DB_CARD_N;
		else 
			return E_DB_CARD_U;
	}
	//用来输出卡密码
	strcpy(tCard.cardpwd,cardpwd);
	/*
	//添加卡片回收明细记录
	T_t_carddtl tCarddtl;
	
	memset(&tCarddtl,0,sizeof(tCarddtl));
	/////////////////////////////////rPack2TableStuct////////////////////////
	des2src(tCarddtl.accdate,pAccTrans->sysPara.sSettleDate);
	tCarddtl.termid=trans.termid;
	tCarddtl.termseqno=trans.termseqno;
	tCarddtl.cardtype=tCard.cardtype;
	des2src(tCarddtl.showcardno,tCard.showcardno);
	des2src(tCarddtl.cardphyid,tCard.cardphyid);
	tCarddtl.cardusetype=CARDUSETYPE_RETURNCARD;
	des2src(tCarddtl.opercode,trans.opercode);
	ret=DB_t_carddtl_add(&tCarddtl);
	if(ret)
	{
		if(DB_REPEAT==ret)
			return E_DB_CARDDTL_E;
		else
			return E_DB_CARDDTL_I;
	}
	*/
	return 0;
}
Exemple #2
0
static int check(int cardno,T_t_customer& tCustomer,T_t_card& tCard)
{
    int ret=0;

    ret=DB_t_card_read_by_cardno(cardno,&tCard);
    if(ret)
    {
        if(DB_NOTFOUND==ret)
            return E_CARDNO_NOT_EXIST;
        else
            return E_DB_CARD_R;
    }
    if(tCard.cardattr[CARDSTAT_TYPE_FREEZE]=='1')
    {
        return E_REWCARD_CARDFROZE;
    }
    if((tCard.cardattr[CARDSTAT_TYPE_LOST]!='1')&&(tCard.cardattr[CARDSTAT_TYPE_BAD]!='1'))
    {
        return E_REWCARD_CARDSTATUS;

    }
    T_t_cardtype tCardtype;

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

    ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardtype);
    if(ret)
    {
        if(DB_NOTFOUND==ret)
            return E_DB_CARDTYPE_N;
        else
            return E_DB_CARDTYPE_R;
    }
    if(tCardtype.renewable[0]!='1')
    {
        return E_CARD_CANNOT_RENEW;
    }
    if(tCard.custid)
    {
        ret=DB_t_customer_read_by_custid(tCard.custid,&tCustomer);
        if(ret)
        {
            if(DB_NOTFOUND==ret)
                return E_CUSTOMER_NOT_EXIST;
            else
                return E_DB_CUSTOMER_R;
        }
        if(tCustomer.status[0]=='2')
        {
            return E_CUSTOMER_LOGOUT;
        }
        if(tCustomer.feetype<1)
        {
            return E_NOSET_CUSTOMER_FEETYPE;
        }
    }
    char lossexpiredate[9]="";
    char sysdate[9]="";
    char sDays[10]="";
    ret=getParaVal(GLOBE_RENEWCARDDATE,sDays);
    if(ret)
        return ret;
    int days=atoi(sDays);

    ret=calcEndDate(tCard.lossdate,days,lossexpiredate);
    if(ret)
        return ret;
    getsysdate(sysdate);
    if(strcmp(sysdate,lossexpiredate)<0)
    {
        return E_CARDLOSSDATE_NOREACH;
    }
    return 0;
}
Exemple #3
0
static int AddCard(T_t_customer& tCustomer,T_t_card& tCard)
{
    //检查卡是否已经使用
    int ret=0;
    char sysdate[9];
    getsysdate(sysdate);

    tCard.status[0]=STATUS_NORMAL;
    ret=DB_t_card_read_by_cardphyid_and_status(tCard.cardphyid,tCard.status,&tCard);
    if(ret!=DB_NOTFOUND)
    {
        if(DB_SUCCESS==ret)
            return E_CARDPHYID_EXIST;
        else
            return E_DB_CARD_R;
    }
    ret=DB_t_card_read_by_showcardno_and_status(tCard.showcardno,tCard.status,&tCard);
    if(ret!=DB_NOTFOUND)
    {
        if(DB_SUCCESS==ret)
            return E_SHOWCARDNO_EXIST;
        else
            return E_DB_CARD_R;
    }
    T_t_cardtype tCardtype;

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

    ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardtype);
    if(ret)
    {
        if(DB_NOTFOUND==ret)
            return E_DB_CARDTYPE_N;
        else
            return E_DB_CARDTYPE_R;
    }
    //判断到期日期
    if(strlen(tCard.expiredate)<1)
    {
        ret=IsInvalidDateTime(tCustomer.outdate,"YYYYMMDD");
        if(ret==0)
        {
            if(strncmp(tCustomer.outdate,sysdate,8)>0)
            {

                des2src(tCard.expiredate,tCustomer.outdate);
            }
        }
        else
        {

            if(tCardtype.validdays<1)
                return E_NOSET_CARDTYPE_VALIDDAYS;
            ret=calcEndDate(sysdate,tCardtype.validdays,tCard.expiredate);
            if(ret)
                return ret;
        }
    }
    else
    {
        ret=IsInvalidDateTime(tCard.expiredate,"YYYYMMDD");
        if(ret)
            return E_INPUT_EXPIREDATE;
        if(strncmp(tCard.expiredate,sysdate,8)<0)
            return E_INPUT_EXPIREDATE;
    }
    tCard.custid=tCustomer.custid;
    des2src(tCard.stuempno,tCustomer.stuempno);
    memset(tCard.cardattr,'0',sizeof(tCard.cardattr));
    des2src(tCard.opendate,sysdate);
    getfmtsysdatetime(tCard.lastsaved);
    ret = getNewUniqNo(KEYTYPE_CARDNO,&tCard.cardno);	//获取最大卡号
    if(ret)
    {
        return ret;
    }
    ret=DB_t_card_add(&tCard);
    if(ret)
    {
        if(DB_REPEAT==ret)
            return E_DB_CARD_E;
        else
            return E_DB_CARD_I;
    }
    return 0;
}
Exemple #4
0
//有卡退卡
static int CardCloseWithCard(ST_PACK *rPack)
{
    //检查卡
    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(trans.cardno,&tCard);
    if(ret)
    {
        writelog(LOG_ERR,"cardno[%d]",trans.cardno);
        if(DB_NOTFOUND==ret)
            return ERRINFO(E_NOTEXIST_CARDNO,trans.cardno);
        else
            return E_DB_CARD_R;
    }
    if(tCard.status[0]!=STATUS_NORMAL)
    {
        DB_t_card_free_lock_by_cur();
        return ERRINFO(E_CARD_LOGOUT,trans.cardno);
    }
    if('1'==tCard.frozeflag[0])
    {
        DB_t_card_free_lock_by_cur();
        return ERRINFO(E_CARD_FREEZE,trans.cardno);
    }
    if('1'==tCard.lossflag[0])
    {
        DB_t_card_free_lock_by_cur();
        return ERRINFO(E_CARD_LOST,trans.cardno);
    }
    if('1'==tCard.badflag[0])
    {
        DB_t_card_free_lock_by_cur();
        return ERRINFO(E_CARD_BADRECORD,trans.cardno);
    }
    if(strcmp(tCard.cardphyid,trans.cardphyid)!=0)
    {
        DB_t_card_free_lock_by_cur();
        //	writelog(LOG_ERR,"db cardphyid[%s],input cardphyid[%s]",tCard.cardphyid,trans.cardphyid);
        return ERRINFO(E_CARD_PHYNO_DIFFER,trans.cardphyid,tCard.cardphyid);
    }
    ret=getCardVerNo(tCard.cardverno);
    if(ret)
    {
        DB_t_card_free_lock_by_cur();
        return ret;
    }
    tCard.status[0]=STATUS_DELETE;
    strcpy(tCard.closedate,trans.accdate);
    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 ERRINFO(E_NOTEXIST_CARDNO,tCard.cardno);
        else
            return E_DB_CARD_U;
    }
    trans.cardtype=tCard.cardtype;
    trans.custid=tCard.custid;
    trans.feetype=tCard.feetype;
    des2src(trans.showcardno,tCard.showcardno);

    T_t_customer tCustomer;

    memset(&tCustomer,0,sizeof(tCustomer));
    if(trans.custid>0)
    {
        ret=DB_t_customer_read_lock_by_cur_and_custid(trans.custid,&tCustomer);
        if(ret)
        {
            if(DB_NOTFOUND==ret)
                return ERRINFO(E_NOTEXIST_CUSTOMER,trans.custid);
            else
                return E_DB_CUSTOMER_R;
        }
        if(tCustomer.holdcardcnt)
        {
            tCustomer.holdcardcnt--;
        }
        des2src(tCustomer.lastsaved,trans.sysdatetime);
        ret=DB_t_customer_update_lock_by_cur(&tCustomer);
        if(ret)
        {
            if(DB_NOTFOUND==ret)
                return ERRINFO(E_NOTEXIST_CUSTOMER,trans.custid);
            else
                return E_DB_CUSTOMER_U;
        }
        des2src(trans.custname,tCustomer.custname);
        des2src(trans.stuempno,tCustomer.stuempno);
    }
    ////添加卡版本号记录
    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;
    cardver.status[0]=STATUS_NORMAL;
    des2src(cardver.cardphyid,tCard.cardphyid);
    des2src(cardver.stuempno,trans.stuempno);
    cardver.cardvertype=CARDVERTYPE_CARDCLOSE;
    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_cardtype tCardType;

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

    ret=DB_t_cardtype_read_by_cardtype(tCard.cardtype,&tCardType);
    if(ret)
    {
        if(DB_NOTFOUND==ret)
            return ERRINFO(E_NOTEXIST_CARDTYPE,tCard.cardtype);
        else
            return E_DB_CARDTYPE_R;
    }
    if(tCardType.reuseable[0]=='1')
    {
        if(pAccTrans->sysPara.bEnableCardMgr)
        {
            ret=UseShowCardNoBack(trans.opercode,tCard.showcardno);
            if(ret)
                return ret;
            T_t_carddtl carddtl;
            memset(&carddtl,0,sizeof(carddtl));

            des2src(carddtl.accdate,pAccTrans->trans.accdate);
            des2src(carddtl.acctime,trans.acctime);
            carddtl.termid=trans.termid;
            carddtl.termseqno=trans.termseqno;
            des2src(carddtl.opercode,trans.opercode);
            carddtl.cardtype=tCard.cardtype;
            carddtl.usetype=CARDUSETYPE_REUSE;
            carddtl.inoutflag=INOUTFLAG_IN;
            carddtl.transcnt=1;
            strcpy(carddtl.summary,"销户回收卡");
            des2src(carddtl.cardphyid,tCard.cardphyid);
            des2src(carddtl.showcardno,tCard.showcardno);
            ret=DB_t_carddtl_add(&carddtl);
            if(ret)
            {
                if(DB_REPEAT==ret)
                    return E_DB_CARDDTL_E;
                else
                    return E_DB_CARDDTL_I;
            }
        }
    }
    //读取帐户信息
    T_t_account tCardAccount;
    memset(&tCardAccount,0,sizeof(tCardAccount));
    ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount);
    if(ret)
    {
        if(DB_NOTFOUND==ret)
            return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno);
        else
            return E_DB_ACCOUNT_R;
    }
    if(tCardAccount.status[0]!=STATUS_NORMAL)
    {
        return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno);
    }
    //检查补助信息
    ret=UpdAllUnGetSubsidy(trans.cardno);
    if(ret)
        return ret;
    trans.cardaftbal=D4U5(trans.cardbefbal+tCardAccount.subsidybal);
    strcpy(trans.cardaccno,tCardAccount.accno);
    //押金处理
    double returncashamt=0;
    if(tCardAccount.foregift>0)
    {
        returncashamt=tCardAccount.foregift;
        trans.inputamt=tCardAccount.foregift;
        trans.unusedamt = trans.inputamt;
        trans.transamt=tCardAccount.foregift;
        trans.fundtype=0;//0表示从帐户扣
        //退押金
        pAccTrans->trans.transtype=TRANSTYPE_RETURNFOREGIFT;
        ret=pAccTrans->DoTransByTransType();
        if(ret)
            return ret;
        ret=pAccTrans->doTransEnd();
        if(ret)
            return ret;
    }
    if(amtcmp(tCardAccount.balance,0)<0)//处理负账户
    {
        trans.inputamt= - tCardAccount.balance;
        if(amtcmp(trans.inputamt,pAccTrans->sysPara.dAutoRenewAccMaxAmt)>0)
        {
            return ERRIF_CARDBAL_OVERDRAW;
        }
        trans.unusedamt = trans.inputamt;
        trans.transamt=trans.inputamt;
        trans.fundtype=0;//0表示从帐户扣
        //营业外支出
        pAccTrans->trans.transtype=TRANSTYPE_LESS_CARDBAL;
        ret=pAccTrans->DoTransByTransType();
        if(ret)
            return ret;
        ret=pAccTrans->doTransEnd();
        if(ret)
            return ret;
        trans.cardaftbal=0;
    }
    //判断卡余额是否大于账户余额
    else if(amtcmp(trans.cardaftbal,tCardAccount.balance)>0)
    {
        trans.cardaftbal=tCardAccount.balance;
    }
    /*
    	if(amtcmp(cardbal - availbal,pAccTrans->sysPara.dAutoRenewAccMaxAmt)>0)
    	{
    		return ERRINFO(E_CARDBAL_EXCEPTION,cardbal,availbal);
    	}
    //		if(amtcmp(trans.cardbefbal,tCardAccount.availbal)!=0)
    //	{
    	trans.inputamt=D4U5(cardbal-availbal);
    	trans.unusedamt = trans.inputamt;
    	trans.transamt=trans.inputamt;
    	trans.fundtype=0;//0表示从帐户扣
    	//营业外支出
    	pAccTrans->trans.transtype=TRANSTYPE_LESS_CARDBAL;
    	ret=pAccTrans->DoTransByTransType();
    	if(ret)
    		return ret;
    	ret=pAccTrans->doTransEnd();
    	if(ret)
    		return ret;
    //		}
    //		else
    //		{
    		//如果卡本身余额等于账户余额,则按照卡余额退款
    //			cardbal=tCardAccount.balance;
    //		}
    */
    else if(amtcmp(trans.cardaftbal,tCardAccount.balance)<0)
    {
        //营业外收入
//		if('C'==backcardtype)
//		{
        //以卡余额为准
        trans.inputamt=D4U5(tCardAccount.balance-trans.cardaftbal);
        trans.unusedamt = trans.inputamt;
        trans.transamt=trans.inputamt;
        trans.fundtype=0;//0表示从帐户扣
        //营业外支
        pAccTrans->trans.transtype=TRANSTYPE_MORE_CARDBALINCOME;
        ret=pAccTrans->DoTransByTransType();
        if(ret)
            return ret;
        ret=pAccTrans->doTransEnd();
        if(ret)
            return ret;
//		}
//		else
//		{
        //以库余额为准
//			trans.cardaftbal=tCardAccount.balance;
//		}
    }
    //下面退款按账户金额来退
    returncashamt= D4U5(returncashamt+trans.cardaftbal);
    if(amtcmp(trans.cardaftbal,0)>0)
    {
        trans.inputamt=trans.cardaftbal;//按卡余额来退款
        trans.unusedamt = trans.inputamt;
        trans.feetype=tCard.feetype;
        /*
        if('1'==backfunctype)
        {
        	trans.fundtype=PAYTYPE_OUTLAY;
        	des2src(trans.voucherno,rPack->scust_auth2);
        }
        */
        ret=pAccTrans->doTrans();
        if(ret)
            return ret;
        ret=pAccTrans->doTransEnd();
        if(ret)
            return ret;
    }
    sprintf(trans.remark,"销户成功,%s,总共应退款%.2lf元",pAccTrans->remark.c_str(),returncashamt);
    return 0;
}