📄 dbsmgw.cpp
字号:
RTRACE(3, "Record for Getting Version failed");
while ( (m_retRow = dbnextrow(m_dbproc)) != NO_MORE_ROWS )
if ( m_retRow == FAIL )
break;
// dbcancel(m_dbproc);
// Error!
// Maybe disconnect the database early.
DbReconnect(m_dbproc);
return -100;
}
dbresults(m_dbproc);
dbbind(m_dbproc, 1, INTBIND, (DBINT) 0, (BYTE *)&dbTotalNum);
while(dbnextrow(m_dbproc) != NO_MORE_ROWS)
m_license = (int)dbTotalNum;
dbcancel(m_dbproc);
RTRACE(4, "The total numbers is " << m_license);
}
if(m_userNum == -1 || m_userNum % FREQUENCY_TIME == 0) // first, to get the users' number
{
strcpy(sql, "select count(*) from UserAcct ");
RTRACE(5, "Execute sql:" << sql);
//clear db buffer
dbclrbuf(m_dbproc, sizeof(sql));
dbcmd(m_dbproc, sql);
if(dbsqlexec(m_dbproc) != SUCCEED)
{
RTRACE(3, "Record for Getting from UserAcct failed");
while ( (m_retRow = dbnextrow(m_dbproc)) != NO_MORE_ROWS )
if ( m_retRow == FAIL )
break;
dbcancel(m_dbproc);
return (-1); // error! Don't have license
}
dbresults(m_dbproc);
dbbind(m_dbproc, 1, INTBIND, (DBINT) 0, (BYTE *)&dbUserNum);
while(dbnextrow(m_dbproc) != NO_MORE_ROWS)
m_userNum = (int)dbUserNum;
dbcancel(m_dbproc);
RTRACE(4, "The users' Numbers is " << m_userNum);
}
if(m_userNum >= m_license)
{
RTRACE(2, "Danger!");
RTRACE(2, "\tUser Number have reached " << m_userNum << " !");
RTRACE(2, "\tTotal Number of AAA system is " << m_license << " !");
RTRACE(2, "\tPlease get license number again for more users.");
RTRACE(2, "\tThe AAA system STOP now!");
return -1; //failed for license number
}
else if(m_userNum*100/m_license >= 99)
{
RTRACE(2, "Danger!");
RTRACE(2, "\tUser Number have reached " << m_userNum << " !");
RTRACE(2, "\tTotal Number of AAA system is " << m_license << " !");
RTRACE(2, "\tPlease get license number again for more users.");
RTRACE(2, "\tOtherwise the AAA system will STOP!");
return -1; //users have reached 99%.
}
else if(m_userNum*100/m_license >= 95)
{
RTRACE(2, "Warning!");
RTRACE(2, "\tUser Number have reached " << m_userNum << " !");
RTRACE(2, "\tTotal Number of AAA system is " << m_license << " !");
RTRACE(2, "\tPlease get license number again for more users.");
RTRACE(2, "\tOtherwise the AAA system will STOP!");
return 2; //users have reached 95%
}
else if(m_userNum*100/m_license >= 90)
{
RTRACE(2, "Warning!");
RTRACE(2, "\tUser Number have reached " << m_userNum << " !");
RTRACE(2, "\tTotal Number of AAA system is " << m_license << " !");
RTRACE(2, "\tPlease get license number again for more users.");
RTRACE(2, "\tOtherwise the AAA system will STOP!");
return 1; //users have reached 90%
}
else
{
RTRACE(3, "\tUser Number have reached " << m_userNum << " !");
RTRACE(3, "\tTotal Number of AAA system is " << m_license << " !");
return 0;
}
}
/*************************************************
*FUNC CheckGrpList
*判断集团号是否长度为6,不为6拒绝
*正确返回0,否则-14
**************************************************/
int CInterfaceContent::CheckGrpList(char * pGroupList )
{
char * pos;
int i = 0, iSeg = 0;
int result = 0;
if ( strlen(pGroupList) < 6 )
{
RTRACE(2, "GroupID is NULL OR GroupID is less than " << GROUPID_LEN);
return -14;
}
memset(( char *)m_groupArray, 0, sizeof(m_groupArray) );
while ( ( pos = strstr(pGroupList, ",") ) != NULL ) //将gouplist去除逗号后放入数组中
{
iSeg = pos - pGroupList ;
if ( iSeg < 6 )
{
RTRACE(2, "GroupID is NULL " );
return -14;
}
else if ( iSeg > GROUPID_LEN )
{
RTRACE(2, "GroupID is too long, more than " << GROUPID_LEN );
return -14;
}
memcpy( (char * ) m_groupArray[i], pGroupList, iSeg );
//memcpy( (char * ) (groupArray + i), pGroupList, iSeg );
m_groupArray[i][GROUPID_LEN] = 0;
pGroupList = pos + 1;
if ( i > MAX_GROUP_NUM )
{
RTRACE(5, "Grouplist is too long, more than "<< MAX_GROUP_NUM );
break;
}
i++;
}
if ( i == 0 )
{
if ( strlen(pGroupList) > 6 )
{
RTRACE(2, "GroupID is too long " );
return -14;
}
memcpy((char * )(m_groupArray[i] ), pGroupList, GROUPID_LEN );
m_groupArray[i][GROUPID_LEN] = 0;
}
else
{
if ( strlen(pGroupList) > 6 )
{
RTRACE(2, "GroupID is too long " );
return -14;
}
else if(strlen(pGroupList)<6)
{
RTRACE(2, "GroupID is NULL " );
return -14;
}
memcpy((char * )m_groupArray[i], pGroupList, GROUPID_LEN );
m_groupArray[i][GROUPID_LEN] = 0;
}
for ( i = 0; i < MAX_GROUP_NUM; i++ )
{
if ( strlen(m_groupArray[i] ) != 0 && strlen(m_groupArray[i] ) != GROUPID_LEN )
{
result = -14;
break;
}
}
return result;
}
/*************************************************
*FUNC RemoveGrpFromGrpList
*Result in groupList
**************************************************/
int CInterfaceContent::RemoveGrpFromGrpList(char * preGroupList, const char * groupNo, char * groupList )
{
int i = 0;
if ( IsGrpInGrpList(preGroupList, groupNo ) == 0 )
{
RTRACE(5, "Remove grouplist, but preGroupList has not include the groupNo, return 0");
return 9;
}
int flag = 0;
for ( i = 0; i < MAX_GROUP_NUM; i++ )
{
if ( m_groupArray[i][0] != 0 )
{
char str[GROUPID_LEN+1] = {0};
if ( flag == 0 )
{
sprintf(str, "%s", m_groupArray[i] );
flag = 1;
}
else
{
sprintf(str, ",%s", m_groupArray[i] );
}
strcat(groupList, str );
}
}
return 0;
}
/*************************************************
*Remove GST GroupList to normal CTSI user
*0 success, -1 failed
*Add by zjl 2003-06-23
*************************************************/
int CInterfaceContent::RemoveGroupList(char * newTel )
{
char groupList[GROUPID_LEN * MAX_GROUP_NUM + 1] = {0};
if ( RemoveGrpFromGrpList(m_preGroupList, m_groupList, groupList) == 9 )
return 0; //原集团列表中无对应集团号,直接返回成功
dbfcmd(m_dbproc, "update UserAcct set GroupList='%s' "
"where UserAccounts = '%s' ", groupList, newTel );
if ( dbsqlexec(m_dbproc) == FAIL )
{
RTRACE(2, "Update UserAcct fail");
return -1;
}
dbresults(m_dbproc);
while ( (m_retRow = dbnextrow(m_dbproc)) != NO_MORE_ROWS )
if ( m_retRow == FAIL )
break;
return 0;
}
/*************************************************
*Add GST GroupList to normal CTSI user
*0 success, -1 failed
*Add by zjl 2003-06-23
*************************************************/
int CInterfaceContent::AddGroupList(char * newTel )
{
char groupList[GROUPID_LEN * MAX_GROUP_NUM + 10] = {0};
if ( IsGrpInGrpList(m_preGroupList, m_groupList) == 1 )
return 0; //本来就包含此组,视为增加成功
else
{
memset(groupList, 0, sizeof(groupList) );
//sprintf(groupList, "%s,%s", m_preGroupList, m_groupList );
if ( m_preGroupList[0] == 0 )
sprintf(groupList, "%s", m_groupList );
else
sprintf(groupList, "%s,%s", m_groupList, m_preGroupList );
groupList[70] = 0;
}
dbfcmd(m_dbproc, "update UserAcct set GroupList='%s' "
"where UserAccounts = '%s' ", groupList, newTel );
if ( dbsqlexec(m_dbproc) == FAIL )
{
RTRACE(2, "Update UserAcct fail");
return -1;
}
dbresults(m_dbproc);
while ( (m_retRow = dbnextrow(m_dbproc)) != NO_MORE_ROWS )
if ( m_retRow == FAIL )
break;
return 0;
}
/*************************************************
*FUNC IsGrpInGrpList
*判断集团号是否在集团列表中 1 是, 0否
*若存在,把groupArray中对应的结点置空
**************************************************/
int CInterfaceContent::IsGrpInGrpList(char * preGroupList, const char * groupNo )
{
char * pos, * pGroupList;
int i = 0, j = 0, iSeg = 0;
int result = 0;
memset( (char *)m_groupArray, 0, sizeof(m_groupArray) );
pGroupList = preGroupList;
while ( ( pos = strstr(pGroupList, ",") ) != NULL ) //将gouplist去除逗号后放入数组中
{
iSeg = pos - pGroupList ;
if ( iSeg < 0 )
iSeg = 0;
memcpy( (char * ) m_groupArray[i], pGroupList, iSeg );
//memcpy( (char * ) (groupArray + i), pGroupList, iSeg );
m_groupArray[i][GROUPID_LEN] = 0;
pGroupList = pos + 1;
if ( i > MAX_GROUP_NUM )
{
RTRACE(5, "Grouplist is too long, more than "<< MAX_GROUP_NUM );
break;
}
i++;
}
if ( i == 0 )
{
memcpy((char * )(m_groupArray[i] ), m_preGroupList, GROUPID_LEN );
m_groupArray[i][GROUPID_LEN] = 0;
}
else
{
memcpy((char * )m_groupArray[i], pGroupList, GROUPID_LEN );
m_groupArray[i][GROUPID_LEN] = 0;
}
for ( i = 0; i < MAX_GROUP_NUM; i++ )
{
if ( strcmp(groupNo, (char *)m_groupArray[i] ) == 0 )
{
result = 1;
memset((char *) m_groupArray[i], 0, GROUPID_LEN );
break;
}
}
return result;
}
int CInterfaceContent::JudgeTimeType(char * datetime, int size)
{
CGlobal::Instance()->Ltrim(datetime, sizeof(datetime));
if(strcmp(datetime, "") == 0)
return 0;
char buffer[5];
int j = 0;
int site = 0;
int year, month, day, hour, minute, second;
// cut datetime
if(strlen(datetime) < 18)
return -1;
datetime[19] = '\0';
// get datetime
strncpy(buffer, datetime, 4);
buffer[4] = 0;
year = atoi(buffer);
strncpy(buffer, datetime+5, 2);
buffer[2] = 0;
month = atoi(buffer);
strncpy(buffer, datetime+8, 2);
buffer[2] = 0;
day = atoi(buffer);
strncpy(buffer, datetime + 11, 2);
buffer[2] = 0;
hour = atoi(buffer);
strncpy(buffer, datetime + 14, 2);
buffer[2] = 0;
minute = atoi(buffer);
strncpy(buffer, datetime + 17, 2);
buffer[2] = 0;
second = atoi(buffer);
if(strlen(datetime) < 19)
return -1;
if(datetime[4] != '-' || datetime[7] != '-' ||
datetime[10] != ' ' || datetime[13] != ':' ||
datetime[16] != ':')
{
RTRACE(5, "Find illeage letter character");
return -1;
}
for(int i=0;i<19;i++)
{
if(i == 4 || i == 7 || i == 10 ||
i == 13 || i == 16)
continue;
else
{
if(datetime[i] > '9' || datetime[i] < '0')
{
RTRACE(5, "Find illeage number character");
return -1;
}
}
}
if(hour >= 60 || hour < 0)
{
RTRACE(5, "Illeage hour formation");
return -1;
}
if(minute >= 60 || minute < 0)
{
RTRACE(5, "Illeage minute formation");
return -1;
}
if(second >= 60 || second < 0)
{
RTRACE(5, "Illeage second formation");
return -1;
}
if(year < 1970 || year > 2100)
{
RTRACE(5, "Illeage year formation");
return -1;
}
if(month > 12 || month < 1)
{
RTRACE(5, "Illeage month formation");
return -1;
}
// big month has 31 days per month
if((month == 1 ||
month == 3 ||
month == 5 ||
month == 7 ||
month == 8 ||
month == 10 ||
month == 12) && (day > 31 || day < 1))
{
RTRACE(5, "Big month has 30 days per month");
return -1;
}
// little month has 31 days per month
if((month == 4 ||
month == 6 ||
month == 9 ||
month == 11) && (day > 30 || day < 1))
{
RTRACE(5, "Little month has 30 days per month");
return -1;
}
if(month == 2)
{
// judgement for leap year
if((year % 400 == 0) || (year % 100 != 0 && year % 4 == 0))
{
if(day > 29 || day < 1)
{
RTRACE(5, "Leap year has 29 days in February ");
return -1;
}
}
else
{
if(day > 28 || day < 1)
{
RTRACE(5, "Normal year has 28 days in February ");
return -1;
}
}
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
// Database access functions
//////////////////////////////////////////////////////////////////////////
// 0: success
// -1: Operate database failed
// -2: OperateType not exists
// -3: UserType not exists
// -4: Change Telephone number from one to the other. But old telephone number not exists
// -5: Change Telephone number from one to the other. But new telephone number has been used.
// -6: User Group not exist
// -7:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -