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; }
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; }
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; }
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; }
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; }
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; }
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; }
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;
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; }
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; }