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