/////////////////// // Common param check used in many cases std::string CheckIDParams(const std::vector<std::string>& params, ChatCommand::tProcFunc_t func, /*out*/ int *id) { *id = 0; // Param count ChatCommand *me = GetCommand(func); if (params.size() < me->iMinParamCount || params.size() > me->iMaxParamCount) return "Invalid parameter count"; // ID presence check if (stringcasecmp(params[0], "id") != 0) return "Please specify a worm ID"; // ID check if (!ConvertID(params[1], id)) return "Invalid worm ID"; return ""; }
//---------------------------------------------------------------------------- // // Function: ReadSmartDocList // // Synopsis: 读入设备档案表 // // Arguments: pSmartDoc -- 设备档案表 // nRecCount -- 记录数 // // History: 2004-09-20 ZhangWei Created // // Notes: // //---------------------------------------------------------------------------- long __stdcall ReadSmartDocList(TSSmartDoc *pSmartDoc, long *nRecCount) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ST_CPACK rpack; ST_CPACK apack; ST_PACK apackarray[60]; char buffer[20960]; WriteLog("三九前置向金仕达调用功能号%d, 申请获取全部设备档案表\n", 930037); long k = 0 ; bool bEnd = false; int nlen = 0 ; int nRow = 0 ; int nfirst = 1 ; int nLen = sizeof(buffer); char omsg[256]; ST_PACK *pPacket = NULL; HANDLE& hHandle = ConnectPool.Alloc(); #if __DEBUG_INTERFACE__ //#if 0 while( !bEnd ) { if( k >= MAX_SMART_DOC ) { ConnectPool.Free(hHandle); WriteLog("设备档案数量大于%d, 请检查设备档案参数表!!!!\n", MAX_SMART_DOC); break; } memset(&rpack, 0, sizeof(rpack)); rpack.head.RequestType = 930037; rpack.head.recCount = 1; /* 本包的记录数*/ rpack.head.retCode = 0; /* 返回代码*/ rpack.head.userdata = 0; if( nfirst ) { rpack.head.firstflag = 1; /* 是否第一个请求(首包请求)*/ rpack.head.nextflag = 0; /* 是否后续包请求*/ nfirst = 0 ; } else { rpack.head.firstflag = 0; /* 是否第一个请求(首包请求)*/ rpack.head.nextflag = 1; /* 是否后续包请求*/ memcpy(&rpack.head.hook,&apack.head.hook,sizeof(rpack.head.hook)); rpack.head.hook.queuetype=apack.head.hook.queuetype; } SetValue(&rpack.head,&rpack.pack, F_SDATE1, "00000000"); SetValue(&rpack.head,&rpack.pack, F_LCERT_CODE, GetValue(iSmartKey)); //前置机注册号 SetValue(&rpack.head,&rpack.pack, F_SCUST_LIMIT2, sSmartKey); //动态密钥 nLen = sizeof(buffer); memset(buffer, 0, sizeof(buffer)); if( !EncodeBuf(&rpack, (unsigned char*)buffer, &nLen, omsg) ) { ConnectPool.Free(hHandle); WriteLog("执行功能号930037读入设备档案表时,运行EncodeBuf失败\n"); return RET_SYSERROR; } printf("执行功能号930037读入设备档案表\n"); if( SendData(hHandle, iServerNo, iFunc, (char*)buffer, nLen, 1, FALSE) != RET_OK ) { ConnectPool.Free(hHandle); WriteLog("执行功能号930037读入设备档案表时,运行SendData失败\n"); return RET_SYSERROR; } memset(buffer, 0, sizeof(buffer)); nLen = sizeof(buffer); nlen = RecvData(hHandle, buffer, nLen, 10000); if( nlen <= 0 ) { ConnectPool.Free(hHandle); WriteLog("执行功能号930037读入设备档案表时,运行RecvData失败\n"); return RET_SYSERROR; } BOOL bRet=DecodeBufWithArray((unsigned char*)buffer,nlen,&apack,apackarray,&nRow,omsg); if( !bRet || apack.head.retCode ) { ConnectPool.Free(hHandle); WriteLog("执行功能号930037读入设备档案表时,运行DecodeBufWithArray,返回无数据,失败!\n"); return RET_SYSERROR; } WriteLog("执行功能号930037读入设备档案表时,得到设备数量为:%d,设备参数为:\n",nRow); for(int i=0; i< nRow; i++) { if( i == 0 ) pPacket = &apack.pack; else pPacket = &apackarray[i-1]; strcpy(pSmartDoc[k].m_szMacCode, pPacket->semp); //终端机型号代码 strcpy(pSmartDoc[k].m_szMacCard, pPacket->sholder_type);//可用IC卡卡型 strcpy(pSmartDoc[k].m_szMacModle, pPacket->semp); //终端机型号 strcpy(pSmartDoc[k].m_szMacType, pPacket->semp); //机型名称 strcpy(pSmartDoc[k].m_szDeviceID, pPacket->sdate1); //设备ID strcpy(pSmartDoc[k].m_szRegister, pPacket->sdate2); //注册号 pSmartDoc[k].m_nAuthID=ConvertID(pSmartDoc[k].m_szDeviceID);//授权号 pSmartDoc[k].m_nMachineNo=pPacket->lvol4; //机号 strcpy(pSmartDoc[k].m_szVersion, pPacket->sdate3); //设备版本号 strcpy(pSmartDoc[k].m_szPassword, "000000"); //系统员密码 strcpy(pSmartDoc[k].m_szOprPasswd, "000000"); //管理员密码 pSmartDoc[k].m_nPwdswitch=-1; //密码开关 strcpy(pSmartDoc[k].m_sClockVer, pPacket->stime0); //父设备 strcpy(pSmartDoc[k].m_szOrgid, "001"); //所属的组织代码 pSmartDoc[k].m_nPortCount=pPacket->lvol5; //服务器端口总数 pSmartDoc[k].m_nSMTPort=pPacket->lvol6; //服务器端口号 strcpy(pSmartDoc[k].m_szPort, pPacket->sbank_code); //通讯端口 pSmartDoc[k].m_nBaudRate=pPacket->lvol9; //波特率 pSmartDoc[k].m_nCommMode=pPacket->lvol8; //链路模式 strcpy(pSmartDoc[k].m_szAddr, pPacket->sstation0); //通讯地址 pSmartDoc[k].m_nStatus=pPacket->lvol7; //设备状态, 下面定义为: pSmartDoc[k].m_nConnType = pPacket->lvol10; //通讯方式 strcpy(pSmartDoc[k].m_szClass, pPacket->snote2); //卡类 // pSmartDoc[k].m_wFlowNo=pPacket->lvol11+1; //期望流水号 modified pSmartDoc[k].m_wLastInvoiceNo=pPacket->lvol11; //终端交易流水号期末值 pSmartDoc[k].m_wStateNo=pPacket->lvol12; pSmartDoc[k].m_nFlow=1; //序号 pSmartDoc[k].m_nBeginInvoice=0; //扎帐的开始流水 pSmartDoc[k].m_wSettleinvoice=0; //扎帐流水号期末值 pSmartDoc[k].m_wEndInvoice=0; //扎帐的结束流水号 strcpy(pSmartDoc[k].m_sBlackExpire, pPacket->sserial0); //黑名单的有效期 strcpy(pSmartDoc[k].m_sDownBlackTime, pPacket->sserial1); //黑名单下传时间期末值 pSmartDoc[k].m_nStartuse=0; //签到结果 pSmartDoc[k].m_nCardID = 12; pSmartDoc[k].m_nDealCount = 10; pSmartDoc[k].m_nInMoney = 100000; pSmartDoc[k].m_nOutMoney = pSmartDoc[k].m_nInMoney; pSmartDoc[k].m_nBeginInvoice = 0 ; pSmartDoc[k].m_wFlowNo = 0 ; pSmartDoc[k].m_wStateNo = 0 ; WriteLog("终端机型号代码=%s,可用IC卡卡型=%s, 终端机型号=%s, 机型名称=%s\n " "设备ID=%s, 注册号=%s, 机号=%d, 设备版本号=%s, 系统员密码=%s, 管理员密码=%s\n" "密码开关=%d, 服务器端口总数=%d, 服务器端口号=%d, 通讯端口=%s, 波特率=%d\n" "链路模式=%d,通讯地址=%s, 设备状态=%d, 交易流水号期末值=%d, 黑名单的有效期=%s, 黑名单版本=%s, 通讯方式=%d,卡类=%s, 父设备:%s\n", pPacket->semp, pPacket->sholder_type, pPacket->semp, pPacket->semp, pPacket->sdate1, pPacket->sdate2, pPacket->lvol4, pPacket->sdate3, "000000", "000000", pSmartDoc[k].m_nPwdswitch, pPacket->lvol5, pPacket->lvol6, pPacket->sbank_code, pPacket->lvol9, pPacket->lvol8, pPacket->sstation0, pPacket->lvol7, pPacket->lvol11, pPacket->sserial0, pPacket->sserial1, pPacket->lvol10, pPacket->snote2, pPacket->stime0); if( !theApp.CheckSmartDocValid(&pSmartDoc[k]) ) { WriteLog("无效设备!!!\n"); ZeroMemory(&pSmartDoc[k], sizeof(TSSmartDoc)); } else { WriteLog("有效设备!ID号=%s, 注册号=%s, 机号=%d, 网络类型:%d..父设备代码=%s\n", pSmartDoc[k].m_szDeviceID, pSmartDoc[k].m_szRegister, pSmartDoc[k].m_nMachineNo, pSmartDoc[k].m_nCommMode, pSmartDoc[k].m_sClockVer); k++; } } if( apack.head.nextflag == 0 ) bEnd = true ; } #else k = 0 ; /***********************************************************************************************************************************************************/ // 以下为加入调试信息 /***********************************************************************************************************************************************************/ int iTick = 0 ; char sTempNo[32]; char sIP[32]; char szParent[32] = "" ; int iMacNo = 1; int nPort = 10001; strcpy(sIP, "10.83.28.40"); for(int j=k; j<2; j++) { sprintf(sTempNo, "0000%04d", j+100); //模拟LPort if( iTick == 0 || iTick == 15 ) { strcpy(pSmartDoc[k].m_szMacCode, "5301"); //终端机型号代码 strcpy(pSmartDoc[k].m_szMacModle, "5301"); //终端机型号 strcpy(pSmartDoc[k].m_szMacType, "5301"); //机型名称 strcpy(pSmartDoc[k].m_szDeviceID, "0000918F"); //设备ID strcpy(pSmartDoc[k].m_szRegister, "0000918F"); //注册号 pSmartDoc[k].m_nAuthID=ConvertID(pSmartDoc[k].m_szDeviceID);//授权号 pSmartDoc[k].m_nMachineNo=1; //机号 strcpy(pSmartDoc[k].m_szAddr, sIP); //通讯地址 pSmartDoc[k].m_nPortCount=16; //服务器端口总数 sprintf(pSmartDoc[k].m_szPort, "%d", nPort); //nPort++); //通讯端口 strcpy(pSmartDoc[k].m_sClockVer, ""); //父设备 iMacNo=1; strcpy(szParent, pSmartDoc[k].m_szDeviceID); pSmartDoc[k].m_nSMTPort=0; //服务器端口号 } else { //if( iTick == 0 || iTick == 6 || iTick == 8 || iTick == 10 ) //{ strcpy(pSmartDoc[k].m_szMacCode, "0226"); //终端机型号代码 strcpy(pSmartDoc[k].m_szMacCard, "64");//可用IC卡卡型 strcpy(pSmartDoc[k].m_szMacModle, "0226"); //终端机型号 strcpy(pSmartDoc[k].m_szMacType, "0226"); //机型名称 //} /*else { strcpy(pSmartDoc[k].m_szMacCode, "0201"); //终端机型号代码 strcpy(pSmartDoc[k].m_szMacCard, "64");//可用IC卡卡型 strcpy(pSmartDoc[k].m_szMacModle, "0201"); //终端机型号 strcpy(pSmartDoc[k].m_szMacType, "0201"); //机型名称 }*/ strcpy(pSmartDoc[k].m_szDeviceID, "00008B1a"); //设备ID strcpy(pSmartDoc[k].m_szRegister, "00008B1a"); //注册号 pSmartDoc[k].m_nAuthID=0x00008B1a;//ConvertID(pSmartDoc[k].m_szDeviceID);//授权号 pSmartDoc[k].m_nMachineNo=1;//++iMacNo; //机号 pSmartDoc[k].m_nPortCount=16; //服务器端口总数 strcpy(pSmartDoc[k].m_szAddr, sIP); //通讯地址 strcpy(pSmartDoc[k].m_sClockVer, szParent); //父设备 pSmartDoc[k].m_nSMTPort=2; //iMacNo; //服务器端口号 } if( iTick >= 15 ) iTick = 0 ; else iTick++; strcpy(pSmartDoc[k].m_szMacCard, "64");//可用IC卡卡型 strcpy(pSmartDoc[k].m_szVersion, ""); //设备版本号 strcpy(pSmartDoc[k].m_szPassword, "000000"); //系统员密码 strcpy(pSmartDoc[k].m_szOprPasswd, "000000"); //管理员密码 pSmartDoc[k].m_nPwdswitch=-1; //密码开关 strcpy(pSmartDoc[k].m_szOrgid, "001"); //所属的组织代码 pSmartDoc[k].m_nBaudRate=19200; //波特率 pSmartDoc[k].m_nCommMode=3; //链路模式 pSmartDoc[k].m_nStatus=0; //设备状态, 下面定义为: pSmartDoc[k].m_nConnType = 1; //通讯方式 strcpy(pSmartDoc[k].m_szClass, "FFFFFFFFFF"); //卡类 // pSmartDoc[k].m_wFlowNo=0; //期望流水号 modified pSmartDoc[k].m_wLastInvoiceNo=0; //终端交易流水号期末值 pSmartDoc[k].m_wStateNo=0; pSmartDoc[k].m_nFlow=1; //序号 pSmartDoc[k].m_nBeginInvoice=0; //扎帐的开始流水 pSmartDoc[k].m_wSettleinvoice=0; //扎帐流水号期末值 pSmartDoc[k].m_wEndInvoice=0; //扎帐的结束流水号 strcpy(pSmartDoc[k].m_sBlackExpire, "991231010101"); //黑名单的有效期 strcpy(pSmartDoc[k].m_sDownBlackTime, "991231010101"); //黑名单下传时间期末值 pSmartDoc[k].m_nStartuse=0; //签到结果 printf("有设备(ID=%s, 注册号:%s, 机号=%d, 网络类型:%d..父设备:%s...\n", pSmartDoc[k].m_szDeviceID, pSmartDoc[k].m_szRegister, pSmartDoc[k].m_nMachineNo, pSmartDoc[k].m_nCommMode, pSmartDoc[k].m_sClockVer); k++; } #endif gnDocCount = k; gpSmartDoc = new TSSmartDoc[gnDocCount]; if( gpSmartDoc == NULL ) { printf("内存不足.....\n"); gnDocCount = 0 ; ConnectPool.Free(hHandle); return RET_SYSERROR; } long iCount = 0 ; memcpy(gpSmartDoc,pSmartDoc,sizeof(TSSmartDoc)*k); memset(pSmartDoc, 0, sizeof(TSSmartDoc)*k); for(int i=0; i< k; i++) { if( theApp.CheckSmartDocValid(gpSmartDoc, k, i) ) { memcpy(&pSmartDoc[iCount++], &gpSmartDoc[i], sizeof(TSSmartDoc)); } } memset(gpSmartDoc, 0, sizeof(TSSmartDoc)*k); gnDocCount = 0 ; k = iCount; ConnectPool.Free(hHandle); WriteLog("有效设备总数量:%d...........\n", k); *nRecCount = k; long nKCount = 0 ; for(i=0; i<k; i++) { if( strcmp(pSmartDoc[i].m_sClockVer, "") ) { for(int j=0; j<k; j++) { if( !strcmp(pSmartDoc[j].m_szDeviceID, pSmartDoc[i].m_sClockVer) && i != j ) { pSmartDoc[i].m_nParentID = pSmartDoc[j].m_nAuthID ; pSmartDoc[i].m_nLevel = 1; pSmartDoc[i].m_szLevelArray[0] = (char)pSmartDoc[j].m_nMachineNo; pSmartDoc[i].m_szLevelArray[1] = (char)pSmartDoc[i].m_nSMTPort; printf("父设备%s\n",pSmartDoc[j].m_szDeviceID); printf("------pSmartDoc[i].m_szDeviceID = %s \n",pSmartDoc[i].m_szDeviceID); printf("------pSmartDoc[i].m_szLevelArray=%d\n",pSmartDoc[j].m_nMachineNo); printf("------pSmartDoc[i].m_szLevelArray=%d\n",pSmartDoc[i].m_nSMTPort); break; } } } else { pSmartDoc[i].m_nLevel=0; } } gnDocCount = k; memcpy(gpSmartDoc,pSmartDoc,sizeof(TSSmartDoc)*k); return RET_OK; }