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

📄 db_zhenzhou.cpp

📁 电信的97接口程序,用于把话单入库。这里是采用FTP方式采集话单
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////
// History:
//	2002.01.09	Start it. (ZhangJL)
//
//  2002.03.11	ActionNo length from 1 to 4, ActionNo[2]
//
//  2002.06.03	Add the watch dog program by zoohoo@163.com
//
//////////////////////////////////////////////////////////////////

#if (_MSC_VER >= 1200)  
#pragma warning( disable : 4800 ) // one performance warning off
#pragma warning( disable : 4786 ) // warning about too long debug symbol off
#endif

#include "gk.h"
#include "global.h"
#include "odbcFunc.h"
#include "dogclient.h"
#include "db_ZhenZhou.h"

/*
#define MIN(x,y) ((x) < (y) ? (x) : (y))
#define MAX(x,y) ((x) < (y) ? (y) : (x))

#define STRCPY(dest, src, len) strncpy(dest, src, len); dest[len-1]=0;
#define STRNCPY(dest, src, len, len2) \
		{ int i = MIN(len, len2); strncpy(dest, src, i); dest[i-1]=0; }
*/
#define	ERRCOUNT	10

int initUserInterface(UserInterface & uiPublic, UserInterface_ZZ ui);
int getDetailSheet(COdbcFunc* odbc, UserInterface_ZZ & userInterface, UserInterface & uiPublic);

int UpdateAAA(COdbcFunc* odbc, UserInterface& uiPublic, UserInterface_ZZ & ui);
int UpdateJK_Sheet_Control(COdbcFunc* odbc, char* sqlcmd, UserInterface_ZZ ui, int iHandleOrder);
int InsertJK_Sheet_Log(COdbcFunc* odbc, UserInterface_ZZ ui, int iHandleOrder);

void reconnectSession();

int GetValueFromODBC_ZZ()
{
	int iRes;
	char sql[SQL_SIZE];
	UserInterface_ZZ userInterface;
	UserInterface	uiPublic;  //Public Interface  class of ZX-AAA

//	void test(void);
	//test();
	//return 0;
	
	CGlobal::Instance()->m_connectTime ++;
	reconnectSession();

	for(int i=0;i<CGlobal::Instance()->m_oradbNum;i++)
	{
		COdbcFunc * odbc = new COdbcFunc();
		// connect successfully
		if(odbc->Connect(CGlobal::Instance()->m_oraList[i].connect,
			CGlobal::Instance()->m_oraList[i].username,
			CGlobal::Instance()->m_oraList[i].password) == 0)
		{
			RTRACE(6, "Connect odbc " << CGlobal::Instance()->m_oraList[i].connect << " successfully!");

//			odbc->SetAutoCommit(false);

			//send the success message to watchdog
			if(CDogClient::Instance()->Init() == 0)
			{
				CDogClient::Instance()->SendMsg(e_status,
					"Intfdb work normally");
				RTRACE(3, "Intfdb work normally");
				RTRACE(5, "Send message by socket");
				CDogClient::Instance()->Close();
			}
			//send the success message to watchdog


			strcpy(sql, "select ");
			strcat(sql, "SerialNo, ");
			strcat(sql, "PortType, ");
			strcat(sql, "PhoneNo, ");
			strcat(sql, "ActionNo, ");
			strcat(sql, "AreaNo, ");
			strcat(sql, "FlowNo ");
			strcat(sql, "from JK_Sheet_Control where PortType = 'yx-gw' and CheckFlag = 'A' ");
			RTRACE(5, sql);
			iRes = odbc->ExecSQL(sql);
			if(iRes != 0)
			{
				RTRACE(5, "SQL execute failed!");
				continue;				
			} else  // execute successly
			{
				RTRACE(5, "SQL execute successly!");

				odbc->AddResult(1);
				int iUserNum = 0, iSuccessNum = 0, iErrCount = 0;
				while(odbc->Next() == 0)
				{
					iUserNum++;
					memset(&userInterface, 0, sizeof(userInterface));

					odbc->GetFieldValue(1, userInterface.SerialNo, sizeof(userInterface.SerialNo));
					odbc->GetFieldValue(2, userInterface.PortType, sizeof(userInterface.PortType));
					odbc->GetFieldValue(3, userInterface.PhoneNo, sizeof(userInterface.PhoneNo));
					odbc->GetFieldValue(4, userInterface.ActionNo, sizeof(userInterface.ActionNo));
					odbc->GetFieldValue(5, userInterface.AreaNo, sizeof(userInterface.AreaNo));
					odbc->GetFieldValue(6, userInterface.FlowNo, sizeof(userInterface.FlowNo));

					PString smsg;
					char sUserNum[8];
					sprintf(sUserNum, "%d", iUserNum);
					smsg = "------userInterface information------Record order:" + PString(sUserNum) + "------\n";
					smsg = smsg + "userInterface.PortType=	" + userInterface.PortType + "\n" ;
					smsg = smsg + "userInterface.SerialNo=	" + userInterface.SerialNo + "\n" ;
					smsg = smsg + "userInterface.PhoneNo=	" + userInterface.PhoneNo + "\n" ;
					smsg = smsg + "userInterface.ActionNo=	" + userInterface.ActionNo + "\n" ;
					smsg = smsg + "userInterface.AreaNo=	" + userInterface.AreaNo + "\n" ;
					smsg = smsg + "userInterface.FlowNo=	" + userInterface.FlowNo + "\n" ;
					RTRACE(6, "\n" << smsg); 

					char sqlTmp[SQL_SIZE];
					strcpy(userInterface.CheckFlag, "B");
					strcpy(userInterface.Bz, "AAA begin to get it!");
					strcpy(sqlTmp, "update JK_Sheet_Control set ChangeTime = sysdate, CheckFlag = 'B', EchoInfo = 'AAA begin to get it!' ");
					strcat(sqlTmp, "where PortType = '%s' and SerialNo = '%s' and FlowNo = '%s' ");
					sprintf(sql, sqlTmp, userInterface.PortType, userInterface.SerialNo, userInterface.FlowNo);
					if (UpdateJK_Sheet_Control(odbc, sql, userInterface, 3) != 0) //修改控制表中标志为B(已取)
					{		
						iErrCount++;
						if (iErrCount > ERRCOUNT) //如数据库出错次数达到一定值,则中断本批处理
							break;
						else
							continue;
					}

					if (getDetailSheet(odbc, userInterface, uiPublic) != 0) //取得用户的有关属性,存在uiPublic中
					{
						RTRACE(2, "Get data from JK_Sheet_Detail failed!");
						continue;
					};

					if (UpdateAAA(odbc, uiPublic, userInterface) == 0)
					{
						iSuccessNum++;
					}
					odbc->AbortQuery(1);
				}
				odbc->AbortQuery(1);
				RTRACE(5, "Total number of record in JK_Sheet_Control and CheckFlag='A' is " << iUserNum
						<< "\nProcess succeeded records number=" << iSuccessNum << "\n");
			}
		}
		else //connect to database failed
		{
			CGlobal::Instance()->m_disconnectTimes++;
			if(CGlobal::Instance()->m_disconnectTimes
				>= CGlobal::Instance()->m_maxDisconnectTimes)
			{
				CGlobal::Instance()->m_disconnectTimes = 0;
				if(CDogClient::Instance()->Init() == 0)
				{
					CDogClient::Instance()->SendMsg(e_fatalError,
						"Can't connect database");
					RTRACE(2, "Can't connect database");
					RTRACE(5, "Send message by socket");
					CDogClient::Instance()->Close();
				}
			}
		}
		delete odbc;
	}
	return 0;
}

int getDetailSheet(COdbcFunc* odbc, UserInterface_ZZ & userInterface, UserInterface & uiPublic)
{
	int iRes = 0;
	char sqlcmd[SQL_SIZE], sqlcmdTmp[SQL_SIZE];
	
	memset(&uiPublic, 0, sizeof(uiPublic));

	strcpy(sqlcmdTmp, "select ");
	strcat(sqlcmdTmp, "ItemCode, ");
	strcat(sqlcmdTmp, "Value_Number, ");
	strcat(sqlcmdTmp, "NewValue ");
	strcat(sqlcmdTmp, "from JK_Sheet_Detail where SerialNo='%s' and PortType='%s' and FlowNo='%s' ");
	sprintf(sqlcmd, sqlcmdTmp, userInterface.SerialNo, userInterface.PortType, userInterface.FlowNo);

	RTRACE(6, "sqlcmd=" << sqlcmd);
	
	odbc->AbortQuery(1);

	iRes = odbc->ExecSQL(sqlcmd, 1);
	if (iRes !=0)
	{
		RTRACE(2, "sql excute failed! iRes=" << iRes);
		return iRes;
	}else
	{
		int item = 0;
		while(odbc->Next(1) == 0)
		{
			item++;
			odbc->GetFieldValue(1, userInterface.ItsmCode, sizeof(userInterface.ItsmCode), 1);
			odbc->GetFieldValue(2, userInterface.Value_Number, sizeof(userInterface.Value_Number), 1);
			odbc->GetFieldValue(3, userInterface.NewValue, sizeof(userInterface.NewValue), 1);

			PString smsg;
			char sItem[8];
			sprintf(sItem, "%d", item);
			smsg = "------userInterface Detail information------Item order:" + PString(sItem) + "------\n";
			smsg = smsg + "userInterface.PortType=	" + userInterface.PortType + "\n" ;
			smsg = smsg + "userInterface.SerialNo=	" + userInterface.SerialNo + "\n" ;
			smsg = smsg + "userInterface.PhoneNo=	" + userInterface.PhoneNo + "\n" ;
			smsg = smsg + "userInterface.ItsmCode=	" + userInterface.ItsmCode + "\n" ;
			smsg = smsg + "userInterface.Value_Number=	" + userInterface.Value_Number + "\n" ;
			smsg = smsg + "userInterface.NewValue=	" + userInterface.NewValue + "\n" ;
			RTRACE(6, "\n" << smsg); 

			initUserInterface(uiPublic, userInterface);
		}
		RTRACE(6, "Total item is :" << item);
		if (item == 0)
		{
			/*char now[21];
			NowDateTime(now);*/
			RTRACE(3, "JK_Sheet_Detail has no responding records! SerialNo=" << userInterface.SerialNo << "PortType=" << userInterface.PortType);
			strcpy(sqlcmdTmp, "update JK_Sheet_Control set CheckFlag='E', ");
			strcat(sqlcmdTmp, "ChangeTime = sysdate, FinishTime = sysdate, ");
			strcat(sqlcmdTmp, "EchoInfo='JK_Sheet_Detail has no responding records!' where SerialNo='%s' and PortType='%s' ");
			sprintf(sqlcmd, sqlcmdTmp, userInterface.SerialNo, userInterface.PortType);
			sprintf(userInterface.Bz, "JK_Sheet_Detail has no responding records! ");
			strcpy(userInterface.CheckFlag, "E");
			UpdateJK_Sheet_Control(odbc, sqlcmd, userInterface, 3);
			return -1;
		}			
		else //根据动作类型设置有关属性,做数据合法性检查
		{
			STRNCPY(uiPublic.areaNo, userInterface.AreaNo, sizeof(uiPublic.areaNo), sizeof(userInterface.AreaNo));
			if ((userInterface.ActionNo[2] == '4') || (userInterface.ActionNo[2] == '1')) //开户
			{
				uiPublic.operateType = 0;
				STRNCPY(uiPublic.teleNumber, userInterface.PhoneNo, sizeof(uiPublic.teleNumber), sizeof(userInterface.PhoneNo)); //开户时以JK_sheet_Control中的号码为准
			}
			else if (userInterface.ActionNo[2] == '5') //暂停
			{
				uiPublic.operateType = 3;
				STRNCPY(uiPublic.teleNumber, userInterface.PhoneNo, sizeof(uiPublic.teleNumber), sizeof(userInterface.PhoneNo)); //暂停时以JK_sheet_Control中的号码为准
			}
			else if (userInterface.ActionNo[2] == '6') //暂停恢复
			{
				uiPublic.operateType = 4;
				STRNCPY(uiPublic.teleNumber, userInterface.PhoneNo, sizeof(uiPublic.teleNumber), sizeof(userInterface.PhoneNo)); //暂停恢复时以JK_sheet_Control中的号码为准
			}
			else if (userInterface.ActionNo[2] == '7') //消户
			{
				uiPublic.operateType = 1;
				STRNCPY(uiPublic.teleNumber, userInterface.PhoneNo, sizeof(uiPublic.teleNumber), sizeof(userInterface.PhoneNo)); //消户时以JK_sheet_Control中的号码为准
			}
			else if (userInterface.ActionNo[2] == '3') //改
			{
				uiPublic.operateType = 2;
				STRNCPY(uiPublic.oldTeleNum, userInterface.PhoneNo, sizeof(uiPublic.oldTeleNum), sizeof(userInterface.PhoneNo));
			}
			else if (userInterface.ActionNo[2] == '2') //移 ???
			{
				uiPublic.operateType = 2;
				STRNCPY(uiPublic.oldTeleNum, userInterface.PhoneNo, sizeof(uiPublic.oldTeleNum), sizeof(userInterface.PhoneNo));
			}
			else if (userInterface.ActionNo[2] == 'B') //核对  按'改'处理
			{
				uiPublic.operateType = 2;
				STRNCPY(uiPublic.oldTeleNum, userInterface.PhoneNo, sizeof(uiPublic.oldTeleNum), sizeof(userInterface.PhoneNo));
				STRNCPY(uiPublic.teleNumber, userInterface.PhoneNo, sizeof(uiPublic.teleNumber), sizeof(userInterface.PhoneNo));
			}
			else
			{
				RTRACE(1, "Sheet ActionNo is unknown! ActionNo=" << userInterface.ActionNo << 
					" SerialNo=" << userInterface.SerialNo << 
					" PortType=" << userInterface.PortType);
				strcpy(sqlcmdTmp, "update JK_Sheet_Control set CheckFlag='E', ");
				strcat(sqlcmdTmp, "EchoInfo='Sheet ActionNo[2] is unknown!' where SerialNo='%s' and PortType='%s' and FlowNo='%s' ");
				sprintf(sqlcmd, sqlcmdTmp, userInterface.SerialNo, userInterface.PortType, userInterface.FlowNo);
				sprintf(userInterface.Bz, "Sheet ActionNo[2] is unknown! ActionNo=%s", userInterface.ActionNo);
				strcpy(userInterface.CheckFlag, "E");
				UpdateJK_Sheet_Control(odbc, sqlcmd, userInterface, 3);

				return -2; //数据不合法
			}					
		}
	}

	return 0;

}

int initUserInterface(UserInterface & uiPublic, UserInterface_ZZ ui)
{
	if(strcmp(ui.ItsmCode, "XX0C905") == 0) //工单编号
	{
		STRNCPY(uiPublic.serviceId, ui.NewValue, sizeof(uiPublic.serviceId), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "XX0C255") == 0) //电话号码(对于移机为旧号码)
	{
		STRNCPY(uiPublic.oldTeleNum, ui.NewValue, sizeof(uiPublic.oldTeleNum), sizeof(ui.NewValue));
	}
	/*else if(strcmp(ui.ItsmCode, "XX0C005") == 0) //营业范围(本地网区号)
	{
		STRNCPY(uiPublic.areaNo, ui.NewValue, sizeof(uiPublic.areaNo), sizeof(ui.NewValue));
	}*/
	else if(strcmp(ui.ItsmCode, "XX3C255") == 0) //新号码(代替old_num)
	{
		STRNCPY(uiPublic.teleNumber, ui.NewValue, sizeof(uiPublic.teleNumber), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "XX0C145") == 0) //客户密码
	{
		STRNCPY(uiPublic.password, ui.NewValue, sizeof(uiPublic.password), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "AX0C900") == 0) //家家e用户组
	{
		STRNCPY(uiPublic.userGroup, ui.NewValue, sizeof(uiPublic.userGroup), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "AX0C901") == 0) //家家e帐号截至时间
	{
		STRNCPY(uiPublic.endTime, ui.NewValue, sizeof(uiPublic.endTime), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "AX0C902") == 0) //家家e用户类型
	{
		STRNCPY(uiPublic.userType, ui.NewValue, sizeof(uiPublic.userType), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "AX0C903") == 0) //家家e剩余时间或金额(保留)
	{
		uiPublic.remainTime = atoi(ui.NewValue);
	}
	else if(strcmp(ui.ItsmCode, "AX0C904") == 0) //家家e访问ICP权限
	{
		STRNCPY(uiPublic.aCLICP, ui.NewValue, sizeof(uiPublic.aCLICP), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "AX0C905") == 0) //家家e访问信息权限
	{
		STRNCPY(uiPublic.aCLContent, ui.NewValue, sizeof(uiPublic.aCLContent), sizeof(ui.NewValue));
	}
	else if(strcmp(ui.ItsmCode, "AX0C906") == 0) //家家e收发权限
	{
		uiPublic.sendRecv = atoi(ui.NewValue);
	}
	else if(strcmp(ui.ItsmCode, "AX0C907") == 0) //家家e备用字段
	{
		STRNCPY(uiPublic.addString, ui.NewValue, sizeof(uiPublic.addString), sizeof(ui.NewValue));
	}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -