int F847226(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; int card_id; char oper_code[11] = ""; char sysdate[9] = ""; char systime[7] = ""; char work_key[51] = ""; T_t_pif_operator tOper; T_t_pif_oper_authcard tAuthCard; T_t_tif_tradeserial tSerial; double uni_no = 0.0; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); memset(&tOper,0,sizeof tOper); memset(&tAuthCard,0,sizeof tAuthCard); memset(&tSerial,0,sizeof tSerial); 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(oper_code,rPack->sname2); if(strlen(oper_code) == 0) { *pRetCode = E_OPER_NOT_EXIST; goto L_RETU; } if(strlen(rPack->scust_limit) == 0) { *pRetCode = E_INPUT_OPER_NULL; goto L_RETU; } if((ret = IsInvalidDateTime(rPack->sdate2,"YYYYMMDD"))) { *pRetCode = ret; goto L_RETU; } ret = DB_t_pif_operator_read_by_oper_code(oper_code,&tOper); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_OPER_NOT_EXIST; else *pRetCode = E_DB_OPERATOR_R; goto L_RETU; } if(strcmp(OPERATOR_LOGOUT,tOper.status) == 0) { writelog(LOG_ERR,"操作员[%s]已注销",oper_code); *pRetCode = E_OPERLOGON_UNREG; goto L_RETU; } //todo:判断如果该操作员持有该卡已经发行过,那么系统允许重复发行,但是不计流水 //todo:用于解决操作员发行卡失败后,必须回收卡才能继续处理的问题 ret=is_already_publish_authcard(rPack->sname,oper_code,&card_id); if(!ret) { //writelog(LOG_ERR,"physical_no=[%s],oper_code=[%s],card_id=[%d]",rPack->sname,oper_code,card_id); ret = DB_t_pif_oper_authcard_read_by_card_id(card_id,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_AUTHCARD_NOT_EXISTS; else *pRetCode = E_DB_OPER_AUTHCARD_R; goto L_RETU; } out_pack->lvol0 = tAuthCard.card_id; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expired_date); des2src(out_pack->scust_limit,tAuthCard.oper_code); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.oper_name); PutRow(handle,out_pack,pRetCode,szMsg); return 0; } if((ret = is_oper_has_authcard(oper_code))) { if(ret == 1) *pRetCode = E_OPER_ALREADY_HAS_AUTHCARD; else *pRetCode = ret; goto L_RETU; } ret=is_physical_no_in_use(rPack->sname); if(ret) { *pRetCode = ret; goto L_RETU; } ret=GetParameter(GLOBE_999_DEVAUTHKEY,work_key); if( ret) { *pRetCode= ret; goto L_RETU; } ret = getNewUniqNo(KEYTYPE_CARD_ID,&uni_no); if(ret) { *pRetCode = ret; goto L_RETU; } tAuthCard.card_id = D2I(uni_no); ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&uni_no); if(ret) { *pRetCode = ret; goto L_RETU; } tSerial.serial_no = D2I(uni_no); getsysdate(sysdate); getsystime(systime); des2src(tAuthCard.issue_date,sysdate); des2src(tAuthCard.issue_time,systime); des2src(tAuthCard.oper_code,oper_code); des2src(tAuthCard.card_phyid,rPack->sname); des2src(tAuthCard.expired_date,rPack->sdate2); tAuthCard.privilege = rPack->lvol0; tAuthCard.status = AUTHCARD_STATUS_NORMAL; // TODO : 检查物理卡号是否已经存在 ret = DB_t_pif_oper_authcard_add(&tAuthCard); if(ret) { if(DB_REPEAT == ret) { writelog(LOG_ERR,"授权卡交易卡号已存在[%d]",tAuthCard.card_id); *pRetCode = E_DB_OPER_AUTHCARD_E; } else *pRetCode = E_DB_OPER_AUTHCARD_I; goto L_RETU; } tSerial.card_id = tAuthCard.card_id; tSerial.serial_state = SERISTAT_NONEEDDEBT; tSerial.serial_type = TXCODE_ISSUE_AUTHCARD; des2src(tSerial.operate_date,sysdate); des2src(tSerial.operate_time,systime); des2src(tSerial.enteract_date,sysdate); des2src(tSerial.enteract_time,systime); des2src(tSerial.collect_date,sysdate); des2src(tSerial.collect_time,systime); des2src(tSerial.oper_code,rPack->scust_limit); ret = DB_t_tif_tradeserial_add(&tSerial); if(ret) { if(DB_REPEAT == ret) { writelog(LOG_ERR,"记录流水表失败!"); *pRetCode = E_DB_TRADESERIAL_E; } else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } writelog(LOG_DEBUG,"发行授权卡成功,操作员[%s]交易卡号[%d]流水号[%d]" ,tAuthCard.oper_code,tAuthCard.card_id,tSerial.serial_no); out_pack->lvol0 = tAuthCard.card_id; out_pack->lvol1 = tAuthCard.privilege; des2src(out_pack->sdate2,tAuthCard.expired_date); des2src(out_pack->scust_limit,tAuthCard.oper_code); des2src(out_pack->sbank_acc,work_key); des2src(out_pack->scust_limit2,tOper.oper_name); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }
int F847230(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret; char sysdate[9] = ""; char systime[7] = ""; char db_date[9] = ""; char db_time[7] = ""; char volume[13] = ""; int auth_card_id = 0; T_t_pif_oper_authcard tAuthCard; T_t_tif_tradeserial tSerial; T_t_pif_operator tOper; ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); double uni_no = 0.0; memset(&tAuthCard,0,sizeof tAuthCard); memset(&tSerial,0,sizeof tSerial); memset(&aPack,0,sizeof aPack); ResetNormalCPack(&aPack,0,1); auth_card_id = rPack->lvol0; if(auth_card_id <= 0) { *pRetCode = E_INPUT_CARDNO; goto L_RETU; } if(strlen(rPack->scust_limit) == 0) { *pRetCode = E_INPUT_OPER_NULL; goto L_RETU; } ret = DB_t_pif_oper_authcard_read_by_card_id(auth_card_id,&tAuthCard); if(ret) { if(DB_NOTFOUND == ret) *pRetCode = E_AUTHCARD_NOT_EXISTS; else *pRetCode = E_DB_OPER_AUTHCARD_R; goto L_RETU; } if(tAuthCard.status == AUTHCARD_STATUS_CANCEL) { writelog(LOG_ERR,"auth card has been cancel ,card id[%d]",tAuthCard.card_id); *pRetCode = E_AUTHCARD_HAS_CANCEL; goto L_RETU; } memset(&tOper,0,sizeof tOper); ret = DB_t_pif_operator_read_by_oper_code(tAuthCard.oper_code,&tOper); if(ret) { if(DB_NOTFOUND == ret) { writelog(LOG_ERR,"operator does not exists, oper [%s]",tAuthCard.oper_code); *pRetCode = E_DB_OPERATOR_N; } else *pRetCode = E_DB_OPERATOR_R; goto L_RETU; } if(strcmp(tOper.status,OPERATOR_LOGOUT) == 0) { writelog(LOG_ERR,"operator [%s] has been logout ",tAuthCard.oper_code); *pRetCode = E_OPERLOGON_UNREG; goto L_RETU; } ret=chk_oper_pwd(tAuthCard.oper_code,rPack->semp_pwd); if(ret) { writelog(LOG_ERR,"operator password error, operator [%s]",tAuthCard.oper_code); if(E_OPER_NOT_EXIST==ret) *pRetCode=E_AUTH_OPER_NOT_EXIST; else if(E_PASSWORD_WRONG==ret) *pRetCode=E_AUTH_OPER_PWD; else *pRetCode=ret; goto L_RETU; } tAuthCard.status = AUTHCARD_STATUS_NORMAL; ret = DB_t_pif_oper_authcard_update_by_card_id(tAuthCard.card_id,&tAuthCard); if(ret) { writelog(LOG_ERR,"update operator auth card information error, card id[%d]",tAuthCard.card_id); *pRetCode = E_DB_OPER_AUTHCARD_U; goto L_RETU; } // 插入黑名单表 ret = InsertToBlkList(auth_card_id,DELETE_BLACKLIST); if(ret) { writelog(LOG_ERR,"insert into black list error, card id[%d]",auth_card_id); *pRetCode = ret; goto L_RETU; } // 生成流水 ret = getNewUniqNo(KEYTYPE_TRADESERIAL,&uni_no); if(ret) { *pRetCode = ret; goto L_RETU; } tSerial.serial_no = D2I(uni_no); getsysdate(sysdate); getsystime(systime); tSerial.card_id = tAuthCard.card_id; tSerial.serial_state = SERISTAT_NONEEDDEBT; tSerial.serial_type = TXCODE_UNLOSS_AUTHCARD; des2src(tSerial.operate_date,sysdate); des2src(tSerial.operate_time,systime); des2src(tSerial.enteract_date,sysdate); des2src(tSerial.enteract_time,systime); des2src(tSerial.collect_date,sysdate); des2src(tSerial.collect_time,systime); des2src(tSerial.oper_code,rPack->scust_limit); ret = DB_t_tif_tradeserial_add(&tSerial); if(ret) { if(DB_REPEAT == ret) { writelog(LOG_ERR,"记录流水表失败!"); *pRetCode = E_DB_TRADESERIAL_E; } else *pRetCode = E_DB_TRADESERIAL_I; goto L_RETU; } writelog(LOG_DEBUG,"解挂授权卡成功,操作员[%s]交易卡号[%d]流水号[%d]" ,tAuthCard.oper_code,tAuthCard.card_id,tSerial.serial_no); SetCol(handle,0); SetCol(handle,F_LVOL0,F_SSERIAL0,0); get_datetime_from_db(db_date,db_time); out_pack->lvol0 = auth_card_id; memcpy(volume,db_date+2,6); memcpy(volume+6,db_time,6); des2src(out_pack->sserial0,volume); PutRow(handle,out_pack,pRetCode,szMsg); return 0; L_RETU: return -1; }