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

📄 gateagentdlg.cpp

📁 PDA通讯网关服务器源码程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	if (strAtOnce==ATONCE_NOSEND)//如果不是立即发送的话,则比较发送时间
	{
		if (m_CPubBase.OnCompareTime(strSetTime)<0)//如果发送时间比当前晚,则暂时不发送
		{
			return 0;
		}
	}
	
	int nDevice=atoi(strHandle.GetBuffer(0));
	iRet = OnSend(nDevice,strTel.GetBuffer(0),strBack.GetBuffer(0),pchFlag,strBack.GetLength());
	if (iRet<0)//如果发送失败则将状态位+1然后写入数据库
	{		
		strState.Format("%02d",iState+1);
		memset(chSQLCmd,0x00,sizeof(chSQLCmd));
		_snprintf(chSQLCmd, SQLLENGTH-1,"update me_send set cState='%s' where atID='%d'",strState.GetBuffer(0),atoi(strId.GetBuffer(0)));
		iRet= OnDbDoWith(chSQLCmd);
		if (iRet<0)
		{
			strTmp.Format("更新语句失败:%s",chSQLCmd);
			OnInsertMess(strTmp.GetBuffer(0));
			return -1;
		}
		return 0;
	}
	//发送成功则修改标志
	memset(chSQLCmd,0x00,sizeof(chSQLCmd));
	_snprintf(chSQLCmd, SQLLENGTH-1,"update me_send set cState='%s' where atID='%d'",STATE_SENDOK,atoi(strId.GetBuffer(0)));
	iRet= OnDbDoWith(chSQLCmd);
	if (iRet<0)
	{
		strTmp.Format("更新语句失败:%s",chSQLCmd);
		OnInsertMess(strTmp.GetBuffer(0));
		return -1;
	}
	return 0;
}

//判断产品是否合法


//分析查询数据记录
int CGateAgentDlg::OnAnalyzeFindSms(int nHandle,char *pchInput,char *pchDiv,char *pchCongrats,char *pchTime,char *pchTelNum)
{
	st_Rec	stRec;
	bool bLeaveRecord = false;
	char chMsg[1000]	= {0};
	char chSQLCmd[SQLLENGTH]={0};
	int iRet = -10;
	CString strTmp;

	memset(&stRec, 0x00, sizeof(st_Rec));
	stRec.iRecStart = 0;
	stRec.iRecNum = 9999;
	
	strTmp.Format("%s",pchInput);
	strTmp=strTmp+"%";
	//根据售货员带有的查询命令和查询日期时间从销售记录表中查询销售短信
	_snprintf(chSQLCmd, SQLLENGTH-1,"select sum(vcNum),sum(vcSum) from me_SaleRecord where vcDatetime like '%s' and vcMovetel='%s'",strTmp.GetBuffer(0),pchTelNum);
	iRet = m_sqlDB.OnExecSql(chSQLCmd, &stRec, bLeaveRecord, chMsg);
	if(iRet<0)
	{
		strTmp.Format("查询语句%s失败",chSQLCmd);	
		OnInsertMess(strTmp.GetBuffer(0));
		m_sqlDB.OnFreeRec(&stRec);
		return -1;
	}
	strTmp = m_CPubBase.OnTrimSpace(stRec.pchRecVal);
	CString strOut;
	if(strTmp.IsEmpty()) 
	{
		m_sqlDB.OnFreeRec(&stRec);
		strOut.Format("无时间段%s的数据,您是否输入错误?",pchInput);
		if (OnInsertSend(nHandle,pchTelNum,pchTime,strOut.GetBuffer(0),SMS_OK)<0) return -2;
		return -2;
	}
	
	double dNum=m_CPubBase.OnAtof(m_CPubBase.OnDoStr(0,20,stRec.pchRecVal).GetBuffer(0));
	double dSum=m_CPubBase.OnAtof(m_CPubBase.OnDoStr(20,20,stRec.pchRecVal).GetBuffer(0));
	strOut.Format("您在%s之内销售的产品总数量为%.1f,总金额为%.2f,%s",pchInput,dNum,dSum,pchCongrats);
	m_sqlDB.OnFreeRec(&stRec);
	//同时插入回复消息到自动回复表格当中strTmp
	if (OnInsertSend(nHandle,pchTelNum,pchTime,strOut.GetBuffer(0),SMS_OK)<0) return -2;	
	return 0;
}


int CGateAgentDlg::OnAgainConnectDb()
{
	char chErr[100]={0};
	CString strShow;
	m_sqlDB.OnDBClose();
	int	iRet = m_sqlDB.OnDBInit(m_sDBServer.GetBuffer(0),m_sDBUser.GetBuffer(0),m_sDBPwd.GetBuffer(0),2,m_sDataBaseName.GetBuffer(0),chErr);
	if (iRet <0)
	{
		strShow.Format("%s,重新连接数据库失败,请查看数据库相关配置,不能进入服务状态!",chErr);
		OnInsertMess(strShow.GetBuffer(0));
		g_bRun = false;
		return -1;
	}
	OnInsertMess("数据库重新连接成功!");
	return 0;
}

void CGateAgentDlg::OnMenuClear() 
{
	m_clcView.DeleteAllItems();	
}

void CGateAgentDlg::OnUpdateMenuTest(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(g_bRun);
}

void CAboutDlg::OnSys() 
{
	ShellExecute(NULL, "open", "Msinfo32.exe", NULL, NULL, SW_SHOWNORMAL);	
}

void CGateAgentDlg::OnMenuCal() 
{
	WinExec("CALC.EXE",SW_NORMAL);	
}

void CAboutDlg::OnClose() 
{
	CDialog::OnOK();
	CDialog::OnClose();
}

void CAboutDlg::OnOK() 
{
	CDialog::OnOK();
}

//提示销售员该提交数据了
int CGateAgentDlg::OnPromptSaler(int nHandle,char *pchTime)
{
	st_Rec	stRec;
	bool bLeaveRecord = false;
	char chMsg[1000]	= {0};
	char chSQLCmd[SQLLENGTH]={0};
	int iRet = -10;
	CString strTmp,strTel;

	//取时间前八位
	strTmp=pchTime;	
	memset(&stRec, 0x00, sizeof(st_Rec));
	stRec.iRecStart = 0;
	stRec.iRecNum = 9999;	
	//统计当天所有的销售金额和毛利
	_snprintf(chSQLCmd, SQLLENGTH-1,"select vcMovetel from ba_employee where vcMovetel not in (select vcMovetel from me_saleRecord where LEFT(vcDatetime, 8)='%s')",strTmp.Mid(0,8).GetBuffer(0));
	iRet = m_sqlDB.OnExecSql(chSQLCmd, &stRec, bLeaveRecord, chMsg);
	if(iRet<0)
	{
		strTmp.Format("查询语句%s失败",chSQLCmd);	
		OnInsertMess(strTmp.GetBuffer(0));
		m_sqlDB.OnFreeRec(&stRec);
		return -1;
	}
	if(stRec.iRecNum == 0)
	{
		m_sqlDB.OnFreeRec(&stRec);
		return 88;
	}

	//如果找到没有提交的数据,那么则送入发送表格当中,提示售货员了
	for (int i=0;i<stRec.iRecNum;i++)
	{
		strTmp=stRec.pchRecVal;
		if (strTmp.IsEmpty()) continue;
		strTel=m_CPubBase.OnTrimSpace(strTmp.Mid(i*TEL_LEN,(i+1)*TEL_LEN).GetBuffer(0));
		OnInsertSend(0,strTel.GetBuffer(0),pchTime,"您该提交今天的销售数据啦!",SMS_NOTICE);
	}
	m_sqlDB.OnFreeRec(&stRec);
	return 0;
}

//插入数据到发送表格
int CGateAgentDlg::OnInsertSend(int nHandle,char *pchTelNum,char *pchTime,char *pchText,char *pFlag)
{
	CString strTmp;
	char chSQLCmd[SQLLENGTH]={0};
	memset(chSQLCmd,0x00,sizeof(chSQLCmd));
	_snprintf(chSQLCmd, SQLLENGTH-1,
				"insert into me_send (vcTel,nDevice,vcSendtime, vcText, cState,cType,cAtonce) values('%s','%d','%s','%s','%s','%s','%s')" ,pchTelNum,nHandle,pchTime,pchText,STATE_NOSEND,pFlag,ATONCE_NOSEND);
	if (OnDbDoWith(chSQLCmd)<0)
	{
		strTmp.Format("插入语句%s失败",chSQLCmd);	
		OnInsertMess(strTmp.GetBuffer(0));
		return -1;
	}
	return 0;
}

//统计指定的某一段时间销售情况
int CGateAgentDlg::OnReportTotal(int nHandle,char *pchInput,char *pchTelNum,char *pchTime,char *pchFlag)
{
	st_Rec	stRec;
	bool bLeaveRecord = false;
	char chMsg[1000]	= {0};
	char chSQLCmd[SQLLENGTH]={0};
	int iRet = -10;
	CString strTmp;

	memset(&stRec, 0x00, sizeof(st_Rec));
	stRec.iRecStart = 0;
	stRec.iRecNum = 9999;	
	//统计当天所有的销售金额和毛利
	strTmp.Format("%s",pchInput);
	strTmp=strTmp+"%";
	_snprintf(chSQLCmd, SQLLENGTH-1,"select sum(vcSum),sum(vcProfit) from me_saleRecord where vcDatetime like '%s'",strTmp.GetBuffer(0));
	iRet = m_sqlDB.OnExecSql(chSQLCmd, &stRec, bLeaveRecord, chMsg);
	if(iRet<0)
	{
		strTmp.Format("查询语句%s失败",chSQLCmd);	
		OnInsertMess(strTmp.GetBuffer(0));
		m_sqlDB.OnFreeRec(&stRec);
		return -1;
	}
	strTmp = m_CPubBase.OnTrimSpace(stRec.pchRecVal);
	CString strOut;
	if(strTmp.IsEmpty()) 
	{
		m_sqlDB.OnFreeRec(&stRec);
		strOut.Format("无时间段%s的数据,您是否输入错误?",pchInput);
		if (OnInsertSend(nHandle,pchTelNum,pchTime,strOut.GetBuffer(0),pchFlag)<0) return -2;
		return -2;
	}
	double dSum=m_CPubBase.OnAtof(m_CPubBase.OnDoStr(0,20,stRec.pchRecVal).GetBuffer(0));
	double dProfit=m_CPubBase.OnAtof(m_CPubBase.OnDoStr(20,20,stRec.pchRecVal).GetBuffer(0));
	strOut.Format("%s内:销售总金额%.2f,毛利%.2f",pchInput,dSum,dProfit);
	m_sqlDB.OnFreeRec(&stRec);
	if (OnInsertSend(nHandle,pchTelNum,pchTime,strOut.GetBuffer(0),pchFlag)<0) return -2;
	return 0;
}


BOOL CGateAgentDlg::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message == WM_KEYDOWN) 
	{		
 		return TRUE;
 	}	
	return CDialog::PreTranslateMessage(pMsg);
}

void CGateAgentDlg::OnMenuHelp() 
{
	ShellExecute(NULL, "open", "e_saler.chm", NULL, NULL, SW_SHOWMAXIMIZED );	
}

//从各个串口中读出短信到m_dqSms队列当中


//读取系统配置
int CGateAgentDlg::OnReadSysCfg()
{
	st_Rec	stRec;
	bool bLeaveRecord = false;
	char chMsg[1000]	= {0};
	char chSQLCmd[SQLLENGTH]={0};
	int iRet = -10;
	CString strTmp;

	memset(&stRec, 0x00, sizeof(st_Rec));
	stRec.iRecStart = 0;
	stRec.iRecNum = 100;	
	_snprintf(chSQLCmd, SQLLENGTH-1,"select chIsSameSalesPrice,chIsWithNode,chIsWriteLog,chAgainSendNum,chReportTime,chPromptTime,chDiv,vcBackText,chIsSucceedBack,chNoDiv,chIsCard from ba_systemConfig");
	iRet = m_sqlDB.OnExecSql(chSQLCmd, &stRec, bLeaveRecord, chMsg);
	if(iRet<0)
	{
		strTmp.Format("查询语句%s失败",chSQLCmd);	
		OnInsertMess(strTmp.GetBuffer(0));
		m_sqlDB.OnFreeRec(&stRec);
		return -1;
	}
	if (stRec.iRecNum==0)
	{
		OnInsertMess("系统配置表中没有记录!");
		m_sqlDB.OnFreeRec(&stRec);
		return -1;
	}
	m_nSmsType=m_CPubBase.OnAtoi(m_CPubBase.OnDoStr(0,2,stRec.pchRecVal).GetBuffer(0));
	m_nIsNode=m_CPubBase.OnAtoi(m_CPubBase.OnDoStr(2,2,stRec.pchRecVal).GetBuffer(0));
	int nWrite=m_CPubBase.OnAtoi(m_CPubBase.OnDoStr(4,2,stRec.pchRecVal).GetBuffer(0));
	if (nWrite==1) 
		{ m_bWrite=true;  }
	else
		{ m_bWrite=false; }
	m_iSendNum=m_CPubBase.OnAtoi(m_CPubBase.OnDoStr(6,2,stRec.pchRecVal).GetBuffer(0));
	m_sDiv=m_CPubBase.OnDoStr(28,2,stRec.pchRecVal);
	m_strBkInfo=m_CPubBase.OnDoStr(30,40,stRec.pchRecVal);	
	m_iIsSucceedBack=m_CPubBase.OnAtoi(m_CPubBase.OnDoStr(70,2,stRec.pchRecVal).GetBuffer(0)); //取发送成功了,是否回送给售货员
	m_strNoDiv=m_CPubBase.OnDoStr(72,2,stRec.pchRecVal).GetBuffer(0); //卡号的客户
	
	CString strIsCard=m_CPubBase.OnDoStr(74,2,stRec.pchRecVal).GetBuffer(0); //卡号的客户
	if (atoi(strIsCard.GetBuffer(0))==0) //带有卡号码
	{
		m_nIsCard=SMS_NOCARD; //不带有客户卡号
	}
	else
	{
		m_nIsCard=SMS_ISCARD; //带有客户卡号
	}
	m_sqlDB.OnFreeRec(&stRec);
	return 0;
}

int CGateAgentDlg::OnPublicMess(CString strMess, CString strName)
{
	CString strTmp,strTile;
	char chSQLCmd[SQLLENGTH]={0};
	memset(chSQLCmd,0x00,sizeof(chSQLCmd));

	strTile.Format("%s说:%s...",strName,strMess.Mid(0,12));
	_snprintf(chSQLCmd, SQLLENGTH-1, "insert into ba_message (vcTitle,vcText,vcOper,dtOper, dtEnd, bPublic) values('%s','%s','%s',GETDATE(),GETDATE()+3,'1')",strTile.GetBuffer(0),strMess.GetBuffer(0),strName.GetBuffer(0));
	if (OnDbDoWith(chSQLCmd)<0)
	{
		strTmp.Format("插入语句%s失败",chSQLCmd);	
		OnInsertMess(strTmp.GetBuffer(0));
		return -1;
	}
	return 0;
}

int CGateAgentDlg::OnStartMainThread()
{
		CMainThread *pMain = NULL;			
		pMain =(CMainThread *)AfxBeginThread(
			RUNTIME_CLASS(CMainThread),
			THREAD_PRIORITY_NORMAL,
			0,
			CREATE_SUSPENDED,
			NULL);

		if (pMain != NULL)
		{				
			pMain->m_pDlg = this;
			pMain->m_iSendNum=m_iSendNum;
			pMain->m_bAutoDelete = true;
			pMain->ResumeThread(); //启动数据收发线程
		} 
		else
		{
			return -1;
		}
		return 0;
}

int CGateAgentDlg::OnRecvSms(int hCom, SM_PARAM *pMsg)
{
	return m_cSmsOper.OnRecvSms(hCom,pMsg);
}

int CGateAgentDlg::OnDeleteAppointed(int hCom, int nIndex)
{
	return m_cSmsOper.OnDeleteAppointed(hCom,nIndex);
}

// 打开串口
// 返回: 如果大于0则为获取的com接口的句柄,小于0则为失败
int CGateAgentDlg::OnOpenCom(char *pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
	return m_cSmsOper.OnOpenCom(pPort,nBaudRate, nParity, nByteSize, nStopBits);
}


int CGateAgentDlg::OnSetInit(int hCom)
{
	return m_cSmsOper.OnSetInit(hCom);
}

int CGateAgentDlg::OnGetSmsCenterNum(int hCom,char *pchOut)
{
	return m_cSmsOper.OnGetSmsCenterNum(hCom,pchOut);
}

int CGateAgentDlg::OnExistSend(int &nHandle, CString &strTel, CString &strBack,CString &strState,CString &strId)
{
	st_Rec	stRec;
	bool bLeaveRecord = false;
	char chMsg[1000]	= {0};
	char chSQLCmd[SQLLENGTH]={0};
	int iRet = -10;
	CString strTmp;

	memset(&stRec, '\0', sizeof(st_Rec));
	stRec.iRecStart = 0;
	stRec.iRecNum = 9999;	
	//从发送表中查找没有发送成功并且发送次数没有达到最大数目的记录
	char chState[2]={0};
	sprintf(chState,"%02d",m_iSendNum+1);
	memset(chSQLCmd,0x00,sizeof(chSQLCmd));

	_snprintf(chSQLCmd, SQLLENGTH-1,"select atID,nDevice,vcTel,cState,cAtonce,vcTime,vcText from me_send where cState<>'%s' and cState<'%s' order by vcSendtime",STATE_SENDOK,chState);
	iRet = m_sqlDB.OnExecSql(chSQLCmd, &stRec, bLeaveRecord, chMsg);
	if(iRet<0)
	{
		OnInsertMess("从发送记录表中查找失败!");
		m_sqlDB.OnFreeRec(&stRec);
		OnAgainConnectDb();
		return -1;
	}
	if(stRec.iRecNum == 0)
	{
		m_sqlDB.OnFreeRec(&stRec);
		return NO_SEND;
	}

	CString strHandle,strAtOnce,strSetTime;
	strId=m_CPubBase.OnDoStr(0,11,stRec.pchRecVal);//取出id
	strHandle=m_CPubBase.OnDoStr(11,11,stRec.pchRecVal);//取出发送句柄设备号码
	strTel=m_CPubBase.OnDoStr(22,30,stRec.pchRecVal); //取出手机号码
	strState=m_CPubBase.OnDoStr(52,2,stRec.pchRecVal);//取出状态
	strAtOnce=m_CPubBase.OnDoStr(54,2,stRec.pchRecVal); //取出是否立即发送的标志
	strSetTime=m_CPubBase.OnDoStr(56,14,stRec.pchRecVal); //取出是否立即发送的标志
	strBack=m_CPubBase.OnDoStr(70,300,stRec.pchRecVal); //取出回复短信

	//去掉从数据库当中取出来的空格
	char chTmp[300]={0};
	sprintf(chTmp,"%s",strBack.GetBuffer(0));
	char *pdest=strstr(chTmp," ");
	int i=0;
	if (pdest!=NULL)
	{
		i=pdest - chTmp + 1;
		strBack=strBack.Mid(0,i);
	}

	m_sqlDB.OnFreeRec(&stRec);
	//如果发送失败次数已经达到设定的最大发送次数,则不处理数据
	int iState = atoi(strState.GetBuffer(0));
	if (iState>m_iSendNum) return 55;

	if (strAtOnce==ATONCE_NOSEND)//如果不是立即发送的话,则比较发送时间
	{
		if (m_CPubBase.OnCompareTime(strSetTime)<0)//如果发送时间比当前晚,则暂时不发送
		{
			return -1;
		}
	}
	nHandle=atoi(strHandle.GetBuffer(0));
	return 1;
}



int CGateAgentDlg::OnDoSendSms(int nHandle, CString strTel, CString strSms,CString strState,CString strId)
{
	char chSQLCmd[SQLLENGTH]={0};
	CString strTmp;
	int iRet = OnSend(nHandle,strTel.GetBuffer(0),strSms.GetBuffer(0),"0",strSms.GetLength());
	if (iRet<0)//如果发送失败则将状态位+1然后写入数据库
	{		
		strState.Format("%02d",atoi(strState.GetBuffer(0))+1);
		memset(chSQLCmd,0x00,sizeof(chSQLCmd));
		_snprintf(chSQLCmd, SQLLENGTH-1,"update me_send set cState='%s' where atID='%d'",strState.GetBuffer(0),atoi(strId.GetBuffer(0)));
		iRet= OnDbDoWith(chSQLCmd);
		if (iRet<0)
		{
			strTmp.Format("更新语句失败:%s",chSQLCmd);
			OnInsertMess(strTmp.GetBuffer(0));
			return -1;
		}
		return 0;
	}
	//发送成功则修改标志
	memset(chSQLCmd,0x00,sizeof(chSQLCmd));
	_snprintf(chSQLCmd, SQLLENGTH-1,"update me_send set cState='%s' where atID='%d'",STATE_SENDOK,atoi(strId.GetBuffer(0)));
	iRet= OnDbDoWith(chSQLCmd);
	if (iRet<0)
	{
		strTmp.Format("更新语句失败:%s",chSQLCmd);
		OnInsertMess(strTmp.GetBuffer(0));
		return -1;
	}
	return 0;
}


int CGateAgentDlg::OnDeleteReadAndSend(int hCom)
{
	return m_cSmsOper.OnDeleteReadAndSend(hCom);
}

void CGateAgentDlg::OnMenuClearsim() 
{
	int  nRetCode = MessageBox("您是否要清空短信猫(modem)里面的所有短消息?","提示",MB_YESNO|MB_ICONQUESTION);
	if(nRetCode==IDYES)
	{
		for(int i=0;i<MAX_COM;i++)
		{
			if (g_smsCom[i].iCom>1)//找到设备的短信中心号码,然后逐个关闭
			{
				m_cSmsOper.OnDeleteReadAndSend(g_smsCom[i].iCom);
			}
		}
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -