📄 dbsmgw.cpp
字号:
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 + -