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

📄 dbsmgw.cpp

📁 电信的97接口程序,用于把话单入库。这里是采用FTP方式采集话单
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                RTRACE(2, "newTel " << newTel 
                    << " dose not exits, can't remove GST power!" );
                return -12;
            }
            else if ( m_userStatus != 1 )
            {
                RTRACE(2, "newTel " << newTel 
                    << " was paused, can't remove GST power!" );
                return -13;
            }
            
            return RemoveGroupList(newTel);
        }

	default:
		return -2; // operation not exists
	}

	return ExecSQL(m_sql, m_sql2);
}


/*==========================================
  GetInfoFromSheetDetail()处理上海97接口
  Add by zjl 2002-07-22
  从SheetDetail表中读出信息,决定该退单动作如何执行
  =========================================*/
int CInterfaceContent::GetInfoFromSheetDetail()
{
	char	sqlcmd[255], sqlcmd_Tmp[255];

	strcpy(sqlcmd_Tmp, "select OldTel, OperateType, SendTime from SheetDetail where ");
	//strcat(sqlcmd_Tmp, "FlowNo = '%s' and AreaNo = '%s' and NewTel = '%s' and RollbackFlag = 0 ");
	//sprintf(sqlcmd, sqlcmd_Tmp, m_addString, m_areaNo, m_teleNumber);
	strcat(sqlcmd_Tmp, "FlowNo = '%s' and RollbackFlag = 0 ");
	sprintf(sqlcmd, sqlcmd_Tmp, m_addString);

	RTRACE(5, sqlcmd);
	dbclrbuf(m_dbproc, sizeof(sqlcmd));
	dbfcmd(m_dbproc, sqlcmd);

	int retCode, operateType = 0;

	if (dbsqlexec(m_dbproc) != SUCCEED)
	{
		RTRACE(2, "SQL excute failed! SQL=" << sqlcmd);
		dbcancel(m_dbproc);
		return -1;
	}

	if (dbresults(m_dbproc) != SUCCEED)
	{
		RTRACE(2, "dbresults failed!");
		while ((retCode = dbnextrow(m_dbproc)) != NO_MORE_ROWS)
			if (retCode == FAIL) break;
			dbcancel(m_dbproc);
			return -1;
	}

	dbbind(m_dbproc, 1, STRINGBIND, (DBINT)0, (unsigned char *)m_oldTeleNum);
	dbbind(m_dbproc, 2, INTBIND, (DBINT)0, (unsigned char *)&operateType);
	dbbind(m_dbproc, 3, STRINGBIND, (DBINT)0, (unsigned char *)m_genTime);
	if ((retCode = dbnextrow(m_dbproc)) == NO_MORE_ROWS)
	{
		RTRACE(2, "Table SheetDetail has no respone records!");
		return retCode;
	}

	while ((retCode = dbnextrow(m_dbproc)) != NO_MORE_ROWS)
	{
		if (retCode == FAIL) break;
	}
	switch (operateType)
	{
	case 0:
		m_operateType = 10; //开户回滚
		break;
	case 1:
		m_operateType = 11; //销户回滚
		break;
	case 2:
		m_operateType = 12; //变更回滚
		break;
	default:
		RTRACE(2, "Table SheetDetail operateType is unknown, operateType=\t" << operateType << "flowNo=\t" << m_addString << "TelNo=" << m_teleNumber);
		return -1;
	}

	return 0;

}

/*==========================================
  OperateDb_SH()处理上海97接口
  Add by zjl 2002-07-22
  CGlobal::Instance()->m_areacode == 3
  =========================================*/
int CInterfaceContent::OperateDb_SH()
{
	char newTel[41];
	char oldTel[41];

	//log sheet to table SheetDetail for fulture rollback
	char	sqlcmd[255], sqlcmd_InsertSheet[255], sqlcmd_UpdateSheet[255];
	char	sqlcmd1[255] = "insert SheetDetail(FlowNo, AreaNo, NewTel, OldTel, SendTime, OperateType, CreateTime) values(";
	char	sqlcmd2[255] = "update SheetDetail set RollbackFlag = RollbackFlag + 1 where FlowNo = '%s' and RollbackFlag = 0 ";

	if (m_isBackSheet == 1) //退单
	{
		if (GetInfoFromSheetDetail() != 0)
		{
			RTRACE(2, "GetInfoFromSheetDetail failed!");
			return -2;
		}

	}

	sprintf(newTel, "%s%s", m_areaNo, m_teleNumber);
	sprintf(oldTel, "%s%s", m_areaNo, m_oldTeleNum);
	newTel[40] = '\0';
	oldTel[40] = '\0';

	strcat(sqlcmd1, " '%s', '%s', '%s', '%s', '%s', %d, getdate() )" );
	sprintf(sqlcmd_InsertSheet,sqlcmd1,  m_addString, m_areaNo, m_teleNumber, m_oldTeleNum, m_sendTime, m_operateType);
	sprintf(sqlcmd_UpdateSheet, sqlcmd2, m_addString);

	if(m_operateType/10 == 1) // the operation of rollback
	{
		if(GetDateDiff(newTel) < 0)
			return -9; // can not rollback operation. Bacause time expire.
	}

	switch(m_operateType)
	{
	case 0: //开户
		{
			RTRACE(3, "begin the Operation Inserting user");
			GetUserStatusFromTable(newTel); // get the status of users
			if(m_userStatus == 3 || m_userStatus == 2) // can be deleted or pause
			{
				// Judge if you can delete the telephone number
				if(DeleteRecord(newTel) == 0)
				{
					GetDeleteSQL();
					ExecSQL(m_sql, m_sql2);
					LinkDelete(newTel); // delete the linking account
					ExecSQL(m_sql, "");
					LinkedDelete(newTel); // delete the linked account
					ExecSQL(m_sql, "");
				}
				else
				{
					RTRACE(2, "Warning! Insert sql error!");
					RTRACE(2, "\t" << newTel<< " exists and can't be deleted!");
					return -7;
				}
			}
			else if (m_userStatus != 0)
			{
				RTRACE(2, "Warning! Insert sql error!");
				RTRACE(2, "\t" << newTel<< " exists!");
				return -7;
			}
			GetInsertSQL();
			strcpy(sqlcmd, sqlcmd_InsertSheet); 
			break;
		}
	case 10: //开户回滚
		{
			RTRACE(3, "begin the Operation rollback opened new user");
			if(GetUserStatusFromTable(newTel) < 0)
				return -10;
			else if(m_userStatus == 3)
			{
				RTRACE(2, "try to rollback open account, but the UserStatus=3(has been deleted!), return -11");
				return -11;
			}
			LinkDelete(newTel); // delete the linking account
			ExecSQL(m_sql, "");
			LinkedDelete(newTel); // delete the linked account
			ExecSQL(m_sql, "");
			GetDeleteSQL();
			strcpy(sqlcmd, sqlcmd_UpdateSheet);
			break;
		}
	case 1: //消户
		{
			RTRACE(3, "begin the Operation deleting user");
			if(GetUserStatusFromTable(newTel) < 0)
				return -10;
			else if(m_userStatus == 3)
				return -11;
			if(CGlobal::Instance()->m_deleteNow == 1)
				GetDeleteSQL();
			else
			{
				SetUserStatus(3);
				m_sql2[0] = '\0';
			}
			ExecSQL(m_sql, m_sql2);
			LinkedDelete(newTel);
			strcpy(sqlcmd, sqlcmd_InsertSheet);
			break;
		}
	case 11: //消户回滚
		{
			RTRACE(3, "begin the Operation rollback deleted user");
			if(GetUserStatusFromTable(newTel) < 0)
				return -10;
			else if(m_userStatus == 1)
				return -11;
			SetUserStatus(1);
			strcpy(sqlcmd, sqlcmd_UpdateSheet);
			break;
		}

	case 2: //变更
		{
			// Judging the exist the oldTelNum.
			// if not exists, it only modifed the properties of UserAcct
			// if exists, it the change number of the users.
			RTRACE(3, "begin the Operation updating user");

			memset(m_oldUserType, 0, sizeof(m_oldUserType));

			int newInherit = GetInheritType(newTel);
			int newStatus = m_userStatus;
			int oldInherit = GetInheritType(oldTel);
			int oldStatus = m_userStatus;

			// old telephone number does not exist or old has been deleted
			if(oldInherit == -1  || oldStatus == 3) 
			{

				// old not exists, and new not exists too.
				if(newInherit == -1) // Can't find the record or sql execute error
				{
					RTRACE(3, "Error! Old not exist and new not too!");
					m_sql[0] = '\0';
					m_sql2[0] = '\0';
					return -4;
					//GetInsertSQL();
				}
				else if(newStatus == 3)
				{
					/*
					if(DeleteRecord(newTel) == 0)
					{
						GetDeleteSQL();
						ExecSQL(m_sql, m_sql2);
						GetInsertSQL();
					}
					else
					{
						RTRACE(2, "Warning! Update sql error!");
						RTRACE(2, "\t" << newTel<< " exists and can't be deleted!");
						return -1;
					}
					*/
					RTRACE(3, "Error! Old not exist and new not too!");
					m_sql[0] = '\0';
					m_sql2[0] = '\0';
					return -4;
				}
				// old not exists, but new exists.
				else
					GetUpdateSQL();
			}
			else 
			{
				// old exists, but new not exists
				if(strcmp(m_userType, m_oldUserType) != 0)
				{
					RTRACE(2, "Error! Can't change the user type!");
					return -13;
				}

				if(newInherit == -1) // Can't find the record or sql execute error
				{

					SetUserStatus(2, m_areaNo, m_oldTeleNum);
					ExecSQL(m_sql, "");
					LinkDelete(oldTel);
					ExecSQL(m_sql, "");
					LinkInsert(oldTel, newTel);
					ExecSQL(m_sql, "");
					LinkChange(oldTel, newTel);
					GetInsertSQL();

//					RTRACE(3, "Error! Old exists, but new not exist!");
//					return -4;
				}
				// old exists, but new's status is deleted
				else if(newStatus == 3)
				{
					if(DeleteRecord(newTel) == 0)
					{
						GetDeleteSQL();
						ExecSQL(m_sql, m_sql2);
						SetUserStatus(2, m_areaNo, m_oldTeleNum);
						ExecSQL(m_sql, "");
						LinkDelete(oldTel);
						ExecSQL(m_sql, "");
						LinkInsert(oldTel, newTel);
						ExecSQL(m_sql, "");
						LinkChange(oldTel, newTel);
						GetInsertSQL();
					}
					else
					{
						RTRACE(2, "Warning! Update sql error!");
						RTRACE(2, "\t" << newTel<< " exists and can't be deleted!");
						return -1;
					}
				}
				
				// old exists, and new exists too.
				// if old telephone number equal to new's, then the operation is
				// change properties. 
				// if old telephone number is not equal to new's. The error.
				else
				{
					if(strcmp(newTel, oldTel) == 0)
						GetUpdateSQL();
					else
					{
						RTRACE(2, "Warning !");
						RTRACE(2, "\tWant to change number from " << oldTel << " to " << newTel);
						RTRACE(2, "\tBut " << newTel << " exists, and " << oldTel << " exists too.");
						m_sql[0] = '\0';
						m_sql2[0] = '\0';
						return -5;
					}
				}
			}
			strcpy(sqlcmd, sqlcmd_InsertSheet);
			break; 
		}

	case 12: //变更回滚
		{
			// Judging the exist the oldTelNum.
			// if not exists, it only modifed the properties of UserAcct
			// if exists, it the change number of the users.
			char tmp[41];
			strncpy(tmp, oldTel, sizeof(tmp));
			strncpy(oldTel, newTel, sizeof(oldTel));
			strncpy(newTel, tmp, sizeof(newTel));

			RTRACE(3, "begin the Operation rollback updated user");
			int oldInherit = GetInheritType(oldTel);
			int oldStatus = m_userStatus;
			int newInherit = GetInheritType(newTel);
			int newStatus = m_userStatus;

			// repair the property
			if(newStatus == 1 && oldStatus == 1 || strcmp(oldTel, newTel) == 0)
				GetUpdateSQL();
			else if(oldInherit == 0 && newInherit == 0 &&
				newStatus == 2 && oldStatus == 1)
			{
//				LinkedDelete(oldTel);
//				ExecSQL(m_sql, "");
				LinkDelete(oldTel);
				ExecSQL(m_sql, "");
				GetDeleteSQL(oldTel);
				ExecSQL(m_sql, m_sql2);
				GetDeleteSQL(newTel);
				ExecSQL(m_sql, m_sql2);
				LinkChange(oldTel, newTel);
				GetInsertSQL(m_areaNo, m_oldTeleNum);
			}
			else
				return -12;
			strcpy(sqlcmd, sqlcmd_UpdateSheet);
			break; 
		}

	case 3: //停机
		{
			RTRACE(3, "begin the Operation pause user");
			if(GetUserStatusFromTable(newTel) < 0)
				return -10;
			else if(m_userStatus != 1)
				return -11;
			SetUserStatus(2);
			strcpy(sqlcmd, sqlcmd_InsertSheet);
			break;
		}

	case 4: //恢复
		{
			RTRACE(3, "begin the Operation resume user");
			if(GetUserStatusFromTable(newTel) < 0)
				return -10;
			else if(m_userStatus != 2)
				return -11;
			SetUserStatus(1);
			strcpy(sqlcmd, sqlcmd_InsertSheet);
			break;
		}


	default:
		return -2; // operation not exists
	}

	int iRet = ExecSQL(sqlcmd, "");
	if (iRet != 0)
	{
		return iRet;
	}
	return ExecSQL(m_sql, m_sql2);
}

int CInterfaceContent::ExecSQL(char * sql, char * sql2)
{
	// Run sql
	RTRACE(3, sql);
	RTRACE(3, sql2);
	dbclrbuf(m_dbproc, sizeof(sql));
	dbcmd(m_dbproc, "begin transaction ");
	dbcmd(m_dbproc, sql);
	dbcmd(m_dbproc, sql2);
	dbcmd(m_dbproc, " select 1");
	dbcmd(m_dbproc, " commit transaction");
	if ( dbsqlexec(m_dbproc) != SUCCEED )
	{
		RTRACE(2, "SQL execute failed");
		dbcancel(m_dbproc);
		return (-1);
	}

	// the below program is for bluk sql express
	// if the sql express spend more time to excute must to do that.
	int iMoreResults = 1;
	int iMoreRows = 1;
	int iRes = 0;
	RETCODE dbRC = SUCCEED;

	while(iMoreResults == 1)
	{
		switch(dbRC = dbresults(m_dbproc))
		{
		case SUCCEED:
			RTRACE(5, "SQL SUCCEED");
			iMoreRows = 1;
			while(iMoreRows == 1)
			{
				switch(dbRC = dbnextrow(m_dbproc))
				{
				case REG_ROW:
					RTRACE(6, "Result REG_ROW");
					// Handle regular row
					break;
				case NO_MORE_ROWS:
					RTRACE(6, "Result NO_MORE_ROWS");
					iMoreRows = 0;
					// All rows in this result set handled
					break;
				case BUF_FULL:
					RTRACE(6, "Result BUF_FULL");
					// Handle full buffer when using row buffering
					break;
				case FAIL:
					// Any error processing desired
					RTRACE(6, "Result FAIL");
					iMoreRows = 0;
					break;
				default:
					// Handle compute row
					RTRACE(6, "Result default");
					break;
				}
			}
			break;
		case NO_MORE_RESULTS:
			RTRACE(4, "SQL NO_MORE_RESULTS");
			iMoreResults = 0;  // All result sets handled
			break;
		case FAIL:
			// Any error processing desired
			// The current command has returned an error

⌨️ 快捷键说明

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