⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isap_clientdb.cpp

📁 unix环境下的多进程方式应用程序编程示例应用
💻 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 + -