📄 isap_clientdb.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <baseobj.h>
#include <samrtbdef.h>
#include <samrtbattr.h>
#include <samrtbpacket.h>
#include <sampacket.h>
#include "obsclientdef.h"
#include <obsclientdb.h>
extern RUNMODE_t runmode;
COBSClientDB::COBSClientDB()
{
wOBSdb=NULL;
pSamHead=NULL;
uOperateType=-1;
memset(cUser,0,sizeof(cUser));
memset(cPasswd,0,sizeof(cPasswd));
memset(cHostString,0,sizeof(cHostString));
memset(cInterfaceTable,0,sizeof(cInterfaceTable));
}
COBSClientDB::~COBSClientDB()
{
clearAllAttr();
}
void COBSClientDB::setDB(const char* User,
const char* Passwd,
const char* HostString)
{
memcpy(cUser,User,strlen(User)+1);
memcpy(cPasswd,Passwd,strlen(Passwd)+1);
memcpy(cHostString,HostString,strlen(HostString)+1);
}
u_char COBSClientDB::getOperateType()
{
return uOperateType;
}
int COBSClientDB::readRecordFromDB()
{
char cQuerySQL[MAXSQLLEN];
WSTM wObj;
int readStatus=0;
char *cTmpID=NULL,*cOperateType=NULL;
char *cPhone=NULL;
clearAllAttr();
if(wObj.init("","","",wOBSdb)!=RTN_SUCCESS)
{
printf("wObj.init failed!\n");
return 0;
}
/* sprintf(cQuerySQL,"SELECT YWLS,YW,HM FROM JKDD WHERE ZT='0' \
and DDSJ=(select min(ddsj) from jkdd where zt='0') AND ROWNUM<2");*/
sprintf(cQuerySQL,"SELECT YWLS,YW,HM FROM JKDD WHERE ZT='0'"); //add by mmx
if(wObj.generalQuery(cQuerySQL)==RTN_SUCCESS)
{
cTmpID=wObj.attr.get("YWLS");
cOperateType=wObj.attr.get("YW");
cPhone=wObj.attr.get("HM");
if (runmode == DEBUG_MODE)
printf("Msg:%s %s %s\n",cTmpID,cOperateType,cPhone);
if(cTmpID!=NULL && cOperateType!=NULL && cPhone!=NULL) //cBussinessID
{
//memcpy((u_char*) &uOperateType,cOperateType,sizeof(u_char));
uOperateType=atoi(cOperateType);
memcpy(cBusinessID,cTmpID,strlen(cTmpID)+1);
if(fetchBussinessFields()==-1)
printf("Msg:Fetch fields Failur.\n");
else
readStatus=1;
}
wObj.queryEnd();
}
else
{
//if (runmode == DEBUG_MODE)
// printf("Msg:Fetch error.\n");
if(!checkDBConnection((WSTM*) &wObj))
return DBFAILURE; //DBFAILURE=2
}
return readStatus;
}
int COBSClientDB::fetchBussinessFields()
{
WSTM wObj;
CSamAttr *pSamCur;
char cProcSQL[MAXSQLLEN];
char *cOperateType=NULL;
char *cFieldCode=NULL;
char *cFieldValue=NULL;
char *cFieldType=NULL;
u_char cAttrValue[128];
int type;
u_long len;
int format;
if(wObj.init("","","",wOBSdb)!=RTN_SUCCESS)
{
printf("wObj.init failed!\n");
return 0;
}
sprintf(cProcSQL,"SELECT BM,XXM,Type FROM %s WHERE YWLS='%s'",BUSINESSTABLE,cBusinessID);
//printf(cProcSQL);
if(wObj.generalQuery(cProcSQL)==RTN_SUCCESS)
{
while(1)
{
cFieldCode=wObj.attr.get("BM");
cFieldValue=wObj.attr.get("XXM");
cFieldType=wObj.attr.get("Type");
memcpy(cAttrValue,cFieldValue,strlen(cFieldValue));
if(cFieldCode!=NULL && cFieldValue!=NULL && cFieldType!=NULL)
{
type=atoi(cFieldCode);
format=atoi(cFieldType);
CSamAttr *samNode=new CSamAttr;
//samNode->nDynamic=0;
samNode->bDynamic=false;
if(!pSamHead) pSamHead=pSamCur=samNode;
else
{
pSamCur->pNext=samNode;
pSamCur=samNode;
}
if(format==OBS_TYPE_STRING){
len=strlen(cFieldValue);
samNode->setString(type,cAttrValue,len);
}
else if(format==OBS_TYPE_INTEGER){
samNode->setInteger(type,atol(cFieldValue));
}
}
else
{
printf("FielCode is null or FieldValue is null or fieldType is null.\n");
continue;
}
if(wObj.queryNext()!=RTN_SUCCESS)
break;
}
wObj.queryEnd();
pSamCur->pNext=NULL;
}
setResponseStatus(PROCESSING);
return 1;
}
void COBSClientDB::clearAllAttr()
{
CSamAttr *pCurNode=NULL;
while(pSamHead!=NULL){
pCurNode=pSamHead->pNext;
delete pSamHead;
pSamHead=pCurNode;
}
}
int COBSClientDB::isConnected()
{
if(wOBSdb!=NULL)
return CONNECT;
else
return DISCONNECT;
}
int COBSClientDB::initDB()
{
int initStatus=0;
if(init(cUser,cPasswd,cHostString)==RTN_SUCCESS)
{
wOBSdb=getDB();
initStatus=1;
}
return initStatus;
}
int COBSClientDB::reInitDB()
{
int reInitStatus=0;
if(reinit(cUser,cPasswd,cHostString)==RTN_SUCCESS)
wOBSdb=getDB();
else
reInitStatus=1;
return reInitStatus;
}
void COBSClientDB::disConnect()
{
if(wOBSdb!=NULL)
delete wOBSdb; //freeDB();
}
int COBSClientDB::fetchRecord()
{
int readRet=0;
readRet=readRecordFromDB();
/*if(readRet==0)
{
//printf("Msg:No unprocessed record found.\n");
readRet=0;
}
readRet=1;*/
return readRet;
}
int COBSClientDB::setResponseStatus(long iResStatus,long lErrCode)
{
WSTM wObj;
char cProcSQL[MAXSQLLEN];
int iProcStatus=0;
//char cErrorCode[3]={0};
if(wObj.init("","","",wOBSdb)!=RTN_SUCCESS) return 0;
memset(cProcSQL,'\0',MAXSQLLEN);
lErrCode=abs(lErrCode);
if (lErrCode==0)
lErrCode=4;
//if (lErrCode>500) lErrCode=99;
/*if (lErrCode<10)
sprintf(cErrorCode,"0%d",lErrCode);
else
sprintf(cErrorCode,"%2d",lErrCode);*/
//sprintf(cProcSQL,"Update JKDD set ZT=lpad(to_char(%d),6,'0'),HDSJ=sysdate where rtrim(YWLS)=rtrim('%s')",lErrCode,cBusinessID);
sprintf(cProcSQL,"Update JKDD set ZT='%d',HDSJ=sysdate where rtrim(YWLS)=rtrim('%s')",lErrCode,cBusinessID);
//printf("cProcSQL=%s\n",cProcSQL);
if(wObj.generalModify(cProcSQL)==RTN_SUCCESS)
iProcStatus=1;
else
printf("update jkdd status failed!");
return iProcStatus;
}
int COBSClientDB::setResponseStatus(long iResStatus)
{
WSTM wObj;
char cProcSQL[MAXSQLLEN];
int iProcStatus=0;
char cTime[10]={0};
char cResStatus[3]={0};
if(wObj.init("","","",wOBSdb)!=RTN_SUCCESS) return 0;
memset(cProcSQL,'\0',MAXSQLLEN);
if (iResStatus==PROCESSING)
strncpy(cTime,"CDSJ",10);
else
strncpy(cTime,"HDSJ",10);
iResStatus=abs(iResStatus);
if (iResStatus>500) iResStatus=99;
if (iResStatus<10)
sprintf(cResStatus,"0%d",iResStatus);
else
sprintf(cResStatus,"%2d",iResStatus);
//printf("cResStatus=%s\n",cResStatus);
sprintf(cProcSQL,"Update JKDD set ZT='%s',%s=sysdate where rtrim(YWLS)=rtrim('%s')",cResStatus,cTime,cBusinessID);
//printf("cProcSQL=%s\n",cProcSQL);
if(wObj.generalModify(cProcSQL)==RTN_SUCCESS)
iProcStatus=1;
else
printf("update jkdd status() failed!");
return iProcStatus;
}
int COBSClientDB::setProcessedStatus()
{
return setResponseStatus(PROCESSED);
}
int COBSClientDB::setFailureStatus(long lErrCode)
{
return setResponseStatus(FAILURE,lErrCode);
}
int COBSClientDB::setTimeOutStatus()
{
return setResponseStatus(TIMEOUT);
}
/*void COBSClientDB::print()
{
CSamAttr * pTmp=pSamHead;
while(pTmp != NULL) {
if (!pTmp->isValid()){
printf("a node is invalid.\n");
}
else {
switch(pTmp->nFormat) {
case PW_TYPE_STRING:
if (pTmp->nDynamic)
printf("type=%d,format=%d,value=%s\n",
pTmp->nType, pTmp->nFormat,pTmp->pStrValue);
else
printf("type=%d,format=%d,value=%s\n",
pTmp->nType, pTmp->nFormat,pTmp->cStrValue);
break;
case PW_TYPE_INTEGER:
printf("type=%d,format=%d,value=%d\n",
pTmp->nType, pTmp->nFormat,pTmp->intValue);
break;
default:
printf("a node is unkown type.\n");
break;
}
}
pTmp = pTmp->pNext;
}
return ;
}*/
int COBSClientDB::setPacketData(CSamPacket &obsPacket)
{
CSamAttr *pSamCur=pSamHead;
if(pSamHead==NULL)
return 0;
while(pSamCur!=NULL)
{
obsPacket.InsertAttr(pSamCur);
pSamCur=pSamCur->pNext;
}
return 1;
}
int COBSClientDB::setReponseResult(char* attrcode,char* value, int format)
{
WSTM wobj;
char InsertSQL[MAXSQLLEN];
memset(InsertSQL,0,MAXSQLLEN);
if(wobj.init("","","",wOBSdb)!=RTN_SUCCESS)
return 0;
format=1-format;
if ((format==0 && atoi(value)==-1) || (format==1 && strlen(value)==0))
{
//printf("null value met\n");
return 1;
}
sprintf(InsertSQL,"INSERT INTO JKYW(ywls,bm,xxm,type) values('%s','%s','%s','%d')",cBusinessID,attrcode,value,format);
//printf("InsertSQL=%s\n",InsertSQL);
if(wobj.generalModify(InsertSQL,false)!=RTN_SUCCESS)
return 0;
return 1;
}
void COBSClientDB::commitDB()
{
wOBSdb->COMMIT_WORK();
}
void COBSClientDB::rollbackDB()
{
wOBSdb->ROLLBACK_WORK();
}
int COBSClientDB::checkDBConnection(WSTM *Wobj)
{
char cTestSQL[MAXSQLLEN];
memset(cTestSQL,0,sizeof(cTestSQL));
sprintf(cTestSQL,"%s","Select sysdate From dual");
if(Wobj!=NULL && Wobj->generalQuery(cTestSQL)!=RTN_SUCCESS)
{
if(reinit(this->cUser,this->cPasswd,this->cHostString)!=RTN_SUCCESS)
{
printf("Failed to reconnect DB.\n");
return 0;
}
else
{
wOBSdb=getDB();
printf("Reconnected DB successfully.\n");
}
}
Wobj->queryEnd();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -