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

📄 dataimport.cpp

📁 我上传的程序为:群发数据管理软件的数据处理.软件可以自己从界面操作,把自己要导入的数据导入数据库.并且有导成的功能
💻 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 + -