📄 dataimport.cpp
字号:
// DataImport.cpp : implementation file
//
#include "stdafx.h"
#include "DataManger.h"
#include "DataImport.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDataImport dialog
extern int bNeed;
extern int System_Status;
extern int System_Import_Data;
extern int System_SmsSqlServer;
extern class CDatabase g_Database; //系统数据库类查询对象
extern class CDatabase g_UpdDatabase; //系统数据库类修改对象
extern class CDatabase g_ImportData; //系统数据库类导入对象
int System_TestFlag=0; //0为测试用,其他参数为正常使用
char System_TestMobileNo[12];
int System_CurrentSmsSendTime=0;
int System_ComNumber=0;
int System_CurrentTimeAdd=0;
int System_HourSendNumber=0; //每个小时发送短信条数
int System_DealHourFlag=0;
CDataImport::CDataImport(CWnd* pParent /*=NULL*/)
: CDialog(CDataImport::IDD, pParent)
{
//{{AFX_DATA_INIT(CDataImport)
m_areacode = _T("");
i_sendnumber =0;
m_smsconent = _T("");
m_send_status = _T("");
i_comnumber = 0;
//}}AFX_DATA_INIT
}
void CDataImport::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDataImport)
DDX_Control(pDX, IDCANCEL, m_btn_import_cancel);
DDX_Control(pDX, IDOK, m_btn_import_ok);
DDX_Text(pDX, IDC_AREACODE, m_areacode);
DDV_MaxChars(pDX, m_areacode, 4);
DDX_Text(pDX, IDC_NUMBER, i_sendnumber);
DDV_MinMaxInt(pDX, i_sendnumber,1, 30000);
DDX_Text(pDX, IDC_SMSCONENT, m_smsconent);
DDV_MaxChars(pDX, m_smsconent, 160);
DDX_Text(pDX, IDC_STATUS, m_send_status);
DDV_MaxChars(pDX, m_send_status, 2);
DDX_Text(pDX, IDC_COM_NUMBER, i_comnumber);
DDV_MinMaxInt(pDX, i_comnumber, 1, 20);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDataImport, CDialog)
//{{AFX_MSG_MAP(CDataImport)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDataImport message handlers
void CDataImport::OnOK()
{
// TODO: Add extra validation here
CString m_tmpstr;
UpdateData(true);
//0.SQL SERVER服务器
bNeed =1;
// 检查短消息内容是否空,或者超长
WCHAR wchar[1024];
int nCount = ::MultiByteToWideChar(CP_ACP, 0, m_smsconent, -1, wchar, 1024);
if(nCount <= 1)
{
AfxMessageBox("请输入消息内容!");
return;
}
else if(nCount >= 70) // 我们决定全部用UCS2编码,最大70个字符(半角/全角)
{
AfxMessageBox("消息内容太长,无法发送!");
return;
}
if (System_Status ==1)
{
m_tmpstr.Format("select MobileCode from t_Ivr_Hnmcc_MobileNo where Area_Code='%s' and Status='%s'",m_areacode, m_send_status);
}
else
{
m_tmpstr.Format("select MobileCode from newlifeivrdb.dbo.t_Ivr_Hnmcc_MobileNo where Area_Code='%s' and Status='%s'",m_areacode, m_send_status);
}
if ( i_comnumber <1 || i_comnumber >10)
{
AfxMessageBox("COM口太多,请重新输入!");
return;
}
//1.打开数据记录集
m_Recordset.m_pDatabase = &g_Database;
m_Recordset.Open(CRecordset::forwardOnly,m_tmpstr,CRecordset::readOnly);
if(m_Recordset.IsEOF())
{
//1.1.
AfxMessageBox("指定数据已经查询完毕,请更新其他查询条件!");
m_Recordset.Close();
return ;
}
// m_pDoc->ShowMsg("指定数据已经查询完毕,开始分析", bNeed);
//2.设备初始化设置
int i_comport =0;
int i_comport_tmpstr = 0;
int i_comportnumber=0;
int i_Current_Time =0; //当前次数
int i_Total_Time=0; //总统计数
int i_Current_UseTime=0;//每个小时增加N条后,时间需要自动加1
int i_SystemHour=0;
int i_SystemDay=0;
int i_SystemMonth=0;
int i_CurrentSystemHour=0;
int i_SystemCurrnetDay=0;
//3.取出系统时间
CString m_currenttime;
COleDateTime m_dateTest;
m_dateTest = COleDateTime::GetCurrentTime();
//4.判断是否取完数据包
while (!m_Recordset.IsEOF())
{
//4.0.
CString m_MobileCode;
CString m_InsertSql;
CString m_UpdateSql;
CString m_comport;
CString m_currtime;
CString m_numtype;
//4.1.取一个数据包分析
m_Recordset.GetFieldValue("MobileCode",m_MobileCode);
//4.2.组装数据包
m_numtype = m_MobileCode.Left(3);
//4.3.取出系统开始导入时间
//---:表示为需要间隔(早上1-5)n个小时群发,1:表示为不需要间隔24个小时群发
if (System_DealHourFlag ==0)
{
i_CurrentSystemHour = m_dateTest.GetHour() + System_CurrentTimeAdd + i_Current_UseTime;
if ( i_CurrentSystemHour >0)
{
if (i_CurrentSystemHour < System_CurrentSmsSendTime)
{
i_CurrentSystemHour = m_dateTest.GetHour() + System_CurrentTimeAdd + i_Current_UseTime+System_CurrentSmsSendTime;
}
}
}
else
{
i_CurrentSystemHour = m_dateTest.GetHour() + System_CurrentTimeAdd + i_Current_UseTime;
}
//4.4.系统数据入库时间(取MOD)
i_SystemHour = i_CurrentSystemHour % 24;
if (System_DealHourFlag == 0)
{
if (i_SystemHour >0)
{
if (i_SystemHour < System_CurrentSmsSendTime)
{
i_SystemHour =+ System_CurrentSmsSendTime;
}
}
}
//4.5.系统数据入库日期(取整)
i_SystemCurrnetDay = i_CurrentSystemHour/24;
i_SystemDay = m_dateTest.GetDay()+i_SystemCurrnetDay;
if (i_SystemDay >30)
{
i_SystemMonth = m_dateTest.GetMonth()+1;
}
else
{
i_SystemMonth = m_dateTest.GetMonth();
}
//4.6.入库日期时间格式
m_currtime.Format("%04d-%02d-%02d %02d:%02d:%02d", m_dateTest.GetYear(),i_SystemMonth, \
i_SystemDay, i_SystemHour, m_dateTest.GetMinute(),m_dateTest.GetSecond());
//4.7.COM口入库
i_comport = i_Total_Time % i_comnumber;
i_comport = i_comport_tmpstr + System_ComNumber;
if ( i_comport > 10)
{
i_comport = i_comport % i_comnumber;
i_comport =+System_ComNumber+1;
i_comport_tmpstr=0;
}
m_comport.Format("COM%d",i_comport);
//4.8.组装插入数据信息
if (System_SmsSqlServer == 1)
{
m_InsertSql.Format("insert into dingshi(num,data,comport,dtime, numtype) \
values('%s','%s', '%s', '%s','%s')",m_MobileCode,m_smsconent,m_comport,\
m_currtime,m_numtype);
}
else
{
m_InsertSql.Format("insert into sms.dbo.dingshi(num,data,comport,dtime, numtype) \
values('%s','%s', '%s', '%s','%s')",m_MobileCode,m_smsconent,m_comport,\
m_currtime,m_numtype);
}
//4.9.修改数据库操作
if (System_Status ==1)
{
m_UpdateSql.Format("update t_Ivr_Hnmcc_MobileNo set status='1' where MobileCode='%s' ",m_MobileCode);
}
else
{
m_UpdateSql.Format("update newlifeivrdb.dbo.t_Ivr_Hnmcc_MobileNo set status='1' where MobileCode='%s' ",m_MobileCode);
}
//4.10.开始事务处理
g_UpdDatabase.BeginTrans();
//4.11.执行SQL操作
g_UpdDatabase.ExecuteSQL(m_UpdateSql);
//4.12.结束事务处理
g_UpdDatabase.CommitTrans();
//4.13.插入本地群发数据库
g_ImportData.ExecuteSQL(m_InsertSql);
//4.14.判断相关参数
//每个小时每个COM口发送数据条数n
int i_TotalHourNumber = System_HourSendNumber * i_comnumber;
if (i_Current_Time == i_TotalHourNumber)
{
i_Current_UseTime++;//每个小时增加N条后,时间需要自动加1
i_Current_Time=0;
}
//4.15退出当次操作系统
if (i_Total_Time == i_sendnumber)
{
m_Recordset.Close();
goto m_End;
}
//4.16.计数器加一
i_Current_Time ++; //当前次数
i_Total_Time ++; //总统计数
i_comport_tmpstr ++;
//4.17.取下一条记录
m_Recordset.MoveNext();
}
m_End:
m_Recordset.Close();
AfxMessageBox("导入数据文件到数据库完成!");
CDialog::OnOK();
}
void CDataImport::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
BOOL CDataImport::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
// m_btn_import_ok.SubclassDlgItem(IDOK, this);
m_btn_import_ok.SetIcon(IDI_OK);
m_btn_import_cancel.SetIcon(IDI_CAN);
//1.当然也可用MFC函数来读配置文件
if (pCfg.setfilename(CONFIGUREFILE) == -1)
{
AfxMessageBox("读指定文件出错!");
return false;
}
//2.每个小时发送短信条数
if (pCfg.readcfgdata("SerCfg", "HourSendNumber", &System_HourSendNumber) == -1)
{
AfxMessageBox("读每个小时发送短信条数出错!");
return false;
}
//3.为测试用,其他参数为正常使用
if (pCfg.readcfgdata("SerCfg", "TestFlag", &System_TestFlag) == -1)
{
AfxMessageBox("读测试标志出错!");
return false;
}
//4.测试号码
if (pCfg.readcfgdata("SerCfg", "TestMobileNo", System_TestMobileNo,sizeof(System_TestMobileNo)) == -1)
{
AfxMessageBox("读测试号码出错!");
return false;
}
//5.取出交易间隔时间数据
if ( pCfg.readcfgdata("SerCfg", "DealHourFlag", &System_DealHourFlag) == -1)
{
AfxMessageBox("读间隔时间处理标志出错!");
return false;
}
//6.CurrentSmsSendTime
if ( pCfg.readcfgdata("SerCfg", "CurrentSmsSendTime", &System_CurrentSmsSendTime) == -1)
{
AfxMessageBox("读间隔时间出错!");
return false;
}
//7.
if ( pCfg.readcfgdata("SerCfg", "ComNumber", &System_ComNumber) == -1)
{
AfxMessageBox("读COM个数失败出错!");
return false;
}
//8.
if ( pCfg.readcfgdata("SerCfg", "CurrentTimeAdd", &System_CurrentTimeAdd) == -1)
{
AfxMessageBox("读CurrentTimeAdd失败出错!");
return false;
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -