int F847226(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_AUTHCARDOPEN; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; char opercode[11] = ""; char work_key[51] = ""; T_t_operator tOper; T_t_authcard tAuthCard; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tOper,0,sizeof tOper); memset(&tAuthCard,0,sizeof tAuthCard); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL1,F_SCUST_LIMIT,F_SCUST_LIMIT2,F_SDATE2,F_SBANK_ACC,0); des2src(opercode,rPack->sname2); des2src(trans.cardphyid,rPack->sname); des2src(trans.showcardno,rPack->sorder0); if(strlen(opercode) == 0) { return E_NOTEXIST_OPER; } if(strlen(rPack->scust_limit) == 0) { return E_INPUT_OPER_NULL; } ret = IsInvalidDateTime(rPack->sdate2,"YYYYMMDD"); if(ret) { return ret; } ret = DB_t_operator_read_by_opercode(opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_OPER; else return E_DB_OPERATOR_R; } if(tOper.status[0]=='0') { DB_t_operator_free_lock_by_c0(); return E_OPER_LOCK; } if(tOper.status[0]==STATUS_DELETE) { DB_t_operator_free_lock_by_c0(); return E_OPERLOGON_UNREG; } //todo:判断如果该操作员持有该卡已经发行过,那么系统允许重复发行,但是不计流水 //todo:用于解决操作员发行卡失败后,必须回收卡才能继续处理的问题 ret=DB_t_authcard_read_by_opercode_and_status(opercode,"1",&tAuthCard); if(ret!=DB_NOTFOUND) { if(0==ret) { if(strcmp(trans.cardphyid,tAuthCard.cardphyid)==0) { out_pack->lvol0 = tAuthCard.cardno; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expiredate); des2src(out_pack->scust_limit,tAuthCard.opercode); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.opername); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } else return E_AUTHCARD_EXIST; } else return E_DB_AUTHCARD_R; } // //记录存在 // if(tAuthCard.cardstatus[CARDSTAT_TYPE_LOST]=='1') // { // //修改原来卡为注销状态 // tAuthCard.status[0]==STATUS_DELETE; // des2src(tAuthCard.closedate,pAccTrans->trans.transdate); // ret=DB_t_authcard_update_by_cardno(tAuthCard.cardno,&tAuthCard); // if(ret) // { // return E_DB_AUTHCARD_U; // } // } //return E_OPER_ALREADY_HAS_AUTHCARD; // } ret=GetSysParaVal(GLOBE_999_DEVAUTHKEY,work_key); if( ret) { return ret; } ret = getNewUniqNo(KEYTYPE_CARDNO,&(trans.cardno)); if(ret) { return ret; } tAuthCard.cardno = trans.cardno; des2src(tAuthCard.opendate,pAccTrans->trans.transdate); des2src(tAuthCard.opercode,opercode); des2src(tAuthCard.cardphyid,trans.cardphyid); des2src(tAuthCard.showcardno,trans.showcardno); des2src(tAuthCard.expiredate,rPack->sdate2); tAuthCard.privilege = rPack->lvol0; tAuthCard.status[0]=STATUS_NORMAL; tAuthCard.lossflag[0]='0'; // TODO : 检查物理卡号是否已经存在 ret = DB_t_authcard_add(&tAuthCard); if(ret) { if(DB_REPEAT == ret) return E_DB_AUTHCARD_E; else return E_DB_AUTHCARD_I; } out_pack->lvol0 = tAuthCard.cardno; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expiredate); des2src(out_pack->scust_limit,tAuthCard.opercode); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.opername); PutRow(handle,out_pack,pRetCode,szMsg); ret = DB_t_operator_read_lock_by_c0_and_opercode(opercode,&tOper); if(ret) { if(DB_NOTFOUND == ret) return E_NOTEXIST_OPER; else return E_DB_OPERATOR_R; } tOper.cardno=tAuthCard.cardno; ret=DB_t_operator_update_lock_by_c0(&tOper); if(ret) { return E_DB_OPERATOR_U; } /* int cardtype=0; ret=UseShowCardNo(trans.opercode,tAuthCard.showcardno,cardtype); if(ret) { return ret; } if(cardtype!=CARDTYPE_AUTH) { return E_CARDTYPE_NOT_AUTHCARD; } T_t_carddtl carddtl; memset(&carddtl,0,sizeof(carddtl)); des2src(carddtl.accdate,pAccTrans->sysPara.sSettleDate); des2src(carddtl.acctime,trans.acctime); carddtl.termid=trans.termid; carddtl.termseqno=trans.termseqno; des2src(carddtl.opercode,trans.opercode); carddtl.cardtype=CARDTYPE_AUTH; carddtl.usetype=CARDUSETYPE_USE; carddtl.inoutflag=INOUTFLAG_OUT; carddtl.transcnt=1; strcpy(carddtl.summary,"发行授权卡"); des2src(carddtl.cardphyid,tAuthCard.cardphyid); des2src(carddtl.showcardno,tAuthCard.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_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); transdtl.status[0]=DTLSTATUS_SUCCESS; transdtl.revflag[0]='0'; transdtl.errcode=0; transdtl.custid=trans.custid; strcpy(transdtl.custname,trans.custname); strcpy(transdtl.transdate,trans.transdate); strcpy(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,pAccTrans->sysPara.sSettleDate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; des2src(transdtl.opercode,trans.opercode); transdtl.cardno=trans.cardno; des2src(transdtl.custname,tOper.opername); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } */ return 0; }
int F850004(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; int deviceid=0; char termno[13]={0}; CAccTrans& ats=CAccTrans::GetInst(); ST_CPACK aPack; ST_PACK *out_pack; out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL3,F_SALL_NAME,0); des2src(termno,rPack->sserial0); ret=GetDeviceidByDevphyid(termno,&deviceid); if(ret) { writelog(LOG_ERR,"termno[%s]",termno); return ret; } // 检查 psam 中的机器号 T_t_device tDevice; memset(&tDevice,0,sizeof(tDevice)); ret=DB_t_device_read_by_deviceid(deviceid,&tDevice); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_DEVICE; else return E_DB_DEVICE_R; } if(tDevice.status[0]!=STATUS_NORMAL) return E_DEVICE_LOGOUT; T_t_psamcard psamcard; memset(&psamcard,0,sizeof(psamcard)); ret=DB_t_psamcard_read_by_termno(termno,&psamcard); if(ret) { writelog(LOG_ERR,"termno[%s]",termno); CHECK_DB_ERR; if(DB_NOTFOUND == ret) return E_DB_PSAMCARD_N; else return E_DB_PSAMCARD_R; } char devstatus[2]={0}; devstatus[0]=DEVRUNSTATUS_ONLINE; ret=UpdDevRunstatusByDeviceid(deviceid,devstatus); if(ret) { writelog(LOG_ERR,"UpdDevRunstatusByDeviceid deviceid[%d]",deviceid); return ret; } T_t_operator tOper; memset(&tOper,0,sizeof(tOper)); ret=DB_t_operator_read_lock_by_c0_and_opercode(rPack->semp_no,&tOper); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_OPER; else return E_DB_OPERATOR_R; } if(tOper.status[0]!=STATUS_NORMAL) { DB_t_operator_free_lock_by_c0(); return ERRINFO(E_OPERLOGON_UNREG,tOper.opercode); } //操作员登录,校验操作员密码 ret=ChkOperPwd(tOper.opercode,rPack->semp_pwd); if(ret) { DB_t_operator_free_lock_by_c0(); return ret; } tOper.loginsiteno=deviceid; tOper.loginflag[0]='1'; db_getsysdatetime2(tOper.logintime); ret=DB_t_operator_update_lock_by_c0(&tOper); if(ret) { return E_DB_OPERATOR_U; } //修改操作员登录状态为1 SetCol(handle,0); SetCol(handle,F_LWITHDRAW_FLAG,0); rPack->lwithdraw_flag = deviceid; writelog(LOG_INFO,"终端%d签到成功",deviceid); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }