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

📄 publicbase.cpp

📁 PDA通讯网关服务器源码程序
💻 CPP
字号:
// PublicBase.cpp: implementation of the CPublicBase class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GateAgent.h"
#include "PublicBase.h"
#include "direct.h"
#include <string.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPublicBase::CPublicBase()
{
	
}

CPublicBase::~CPublicBase()
{

}

int CPublicBase::OnWriteLog(char *pchLogContent)
{

	FILE *pLog = NULL;
	char sFileName[256] = {0};
	char sFilePath[256] = {0};
	char sMessage[256]  = {0};
	char chTmp[230]={0};
	SYSTEMTIME tm;	
	
	memset(chTmp,'\0',sizeof(chTmp));
	memcpy(chTmp,pchLogContent,sizeof(chTmp));

	_mkdir("./log");

	//设置写环境
	GetLocalTime(&tm);
	sprintf(sFileName,"./log/%04d%02d%02d.txt", tm.wYear, tm.wMonth, tm.wDay);
    memset(sMessage,'\0',sizeof(sMessage));
	sprintf(sMessage,"%02d:%02d:%02d  %s\r\n",tm.wHour,tm.wMinute,tm.wSecond,chTmp);
	
	
	//写日志
	pLog = fopen(sFileName, "a");
	if (pLog != NULL)
	{
		fwrite(sMessage, strlen(sMessage), 1, pLog);	
		fclose(pLog);
	}

	return 0;
}


int CPublicBase::OnAnalyzeText(CString strMess, char *pchDiv,char *pchCard,int &iIsCard)
{
	int nSmsType = SALE_SMS; //为正常完整的销售记录

	if(strMess==NO_SALE)
	{
		nSmsType=NOSALE_SMS;  //没有买东西出去
		return nSmsType;
	}
	//如果字符串当中没有找到分隔符号
	if (strMess.Find(pchDiv)<0)
	{
		if(strMess.Left(1)==FIND)
		{
			nSmsType=FIND_SMS;
			return nSmsType;
		}		
		if(strMess.Left(1)==CANCEL)
		{
			nSmsType=CANCEL_SMS;
			return nSmsType;
		}
        if(strMess.Left(1)==FINDPRICE)
		{
			nSmsType=FINDPRICE_SMS;
			return nSmsType;
		}
		if(strMess.Left(1)==TOTAL)
		{
			nSmsType=REPORT_SMS;
			return nSmsType;
		}
		if(strMess.Left(1)==TOTALNODE)
		{
			nSmsType=TOTALNODE_SMS;
			return nSmsType;
		}
		if((strMess.Left(4)==TC1) || (strMess.Left(4)==TC2))
		{
			nSmsType=EXITSYSTEM_SMS;
			return nSmsType;
		}

	}
	return nSmsType;
}

//检查电话号码,如果前面带有86或者106,则去掉这些号码,保证进入数据库的号码干净
CString CPublicBase::OnCheckIsChina(char *pchInput,CString strFront)
{
	CString strTmp,strReturn;
	strTmp.Format("%s",	pchInput);
	int iLenFront=strFront.GetLength();
	if (strTmp.Mid(0,2).Compare("86")==0)
	{
		strReturn=strTmp.Mid(2);
		return strReturn;
	}
	else if((strTmp.Mid(0,iLenFront).Compare(strFront.GetBuffer(0))==0))//如果小灵通号码前面带有前缀,则去掉前缀
	{
		strReturn=strTmp.Mid(iLenFront);
		return strReturn;
	}
	else
	{
		return strTmp;
	}
}

CString CPublicBase::OnNumSendCheck(char *pchInput,CString strFront)
{
	CString strTmp,strReturn;
	strTmp.Format("%s",	pchInput);
	int iLenFront=strFront.GetLength();
	if (strTmp.Mid(0,2).Compare("86")==0 ||(strTmp.Mid(0,iLenFront).Compare(strFront.GetBuffer(0))==0))//如果前面带有86或者小灵通号码前面已经有前缀了则不补齐
	{
		return strTmp;
	}
	else if (strTmp.Left(1).Compare("0")==0) //小灵通号码,则补上前缀
	{
		strReturn=strFront+strTmp;
		return strReturn;
	}
	else //不是小灵通号码,也没有86,则加上86
	{
		strReturn="86"+strTmp;
		return strReturn;
	}
}

//合并两个字符串,去掉空格符号
CString CPublicBase::OnJoin(char *pchInput1,char *pchInput2)
{
	CString strTmp,strRet;

	strTmp.Format("%s",pchInput1);
	strTmp.TrimRight(" ");

	strRet.Format("%s",pchInput2);
	strRet.TrimRight(" ");

	strRet=strTmp+strRet;

	return strRet;
}

//向listctrl中插入消息,并同时写日志
void CPublicBase::OnInsertMess(CListCtrl *p_ListShow,char *strShow, bool bShow, bool bWritelog)
{
	CTime t = CTime::GetCurrentTime();
	CString strMessage = t.Format("%m月%d日%H:%M:%S ");
	if (bShow)
	{
		//如果内容太多重新情况刷屏,以免占用太多的内存
		if (p_ListShow->GetItemCount() > 1000)
		{
			p_ListShow->DeleteAllItems();
		}
		p_ListShow->InsertItem(0,strMessage.GetBuffer(0));
		p_ListShow->SetItemText(0, 1, strShow);
	//	p_ListShow->UpdateData(false);
	}
	if (bWritelog)
	{
		OnWriteLog(strShow);
	}
	
}

//初始化要显示的内容和数据
void CPublicBase::OnInitGrid(CListCtrl *p_ListShow,bool bTime,char *strTile)
{
	p_ListShow->ModifyStyle(LVS_TYPEMASK, LVS_REPORT | LVS_SINGLESEL , 0);
	p_ListShow->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP |LVS_EX_HEADERDRAGDROP|LVS_EX_UNDERLINECOLD );
	p_ListShow->SendMessage(LVM_SETBKCOLOR, 0, LPARAM(RGB(255,255,235)));
	p_ListShow->SendMessage(LVM_SETTEXTBKCOLOR, 0, LPARAM(RGB(146,170,231)));
	//p_ListShow->SetBkColor(GetSysColor(COLOR_INFOBK));
	//p_ListShow->SetTextBkColor(GetSysColor(COLOR_INFOBK));
	//p_ListShow->SetTextColor(RGB(25,25,255));
	//CSize	scrollSize(1300, 1040);

	//	p_ListShow->ApproximateViewRect(scrollSize,-1);
	if (bTime)
	{
		p_ListShow->InsertColumn(0, "时间", LVCFMT_CENTER, 110, 0);
		p_ListShow->InsertColumn(1, "内容", LVCFMT_LEFT, 900, 1);	
	}
	else
	{
		p_ListShow->InsertColumn(0, strTile, LVCFMT_LEFT, 1200, 1);	
	}
}

//消息最后是否为正常的结束符号
int CPublicBase::OnIsEnd(CString strMess)
{
	if ((strMess.Right(1).Compare("#")==0)|| \
		(strMess.Right(1).Compare("=")==0)||(strMess.Right(1).Compare("!")==0)|| \
		(strMess.Right(1).Compare("@")==0)||(strMess.Right(1).Compare("/")==0)|| (strMess.Right(1).Compare("&")==0))

	{
		return 0;
	}
	else		
		return -2;
}

//是否为完整的消息
int CPublicBase::OnIsWhole(CString strMess,char *pchDiv)
{
	//如果销售记录最前面带有",",则不为完整的记录
	if(strMess.Left(1).Compare(pchDiv)==0)
	{
		return -1;
	}
	return OnIsEnd(strMess);
/*
	if ((strMess.Right(1).Compare("*")==0) || (strMess.Right(1).Compare("#")==0)||(strMess.Right(1).Compare("=")==0)||(strMess.Right(1).Compare("!")==0))
	{
		return 0;
	}
	return -1;
	*/
}

CString CPublicBase::OnDoStr(int iStart,int iLen,char *pchInput)
{
	CString strBack="";
	char pchMess[800];//new char[iLen];
	memset(pchMess,0x00,sizeof(pchMess));
	memcpy(pchMess,pchInput+iStart,iLen);
	pchMess[iLen]='\0';
	strBack.Format("%s",pchMess);  //取出回复短信
	strBack.TrimLeft(" ");
	strBack.TrimRight(" ");

	return strBack;
}


//去掉空格
CString CPublicBase::OnTrimSpace(char *pchInput)
{
	CString strTmp;
	strTmp.Format("%s",pchInput);  
	strTmp.TrimLeft();
	strTmp.TrimRight();
	return strTmp;
}

//将字符串转化为整型
int CPublicBase::OnAtoi(char *pchInput)
{
	return atoi(OnTrimSpace(pchInput).GetBuffer(0));
}

//将字符串转化为浮点类型
double CPublicBase::OnAtof(char *pchInput)
{
	return atof(OnTrimSpace(pchInput).GetBuffer(0));
}

//检查字符串是否为数字类型,主要用来验证价格和数量,防止用户输入错误
//返回:-1为不合法字符串,0为合法
//输入:要验证的字符串
int CPublicBase::OnCheckNumber(char *p)
{
	if (atof(p)<=0 || atof(p)>100000)
	{
		return -1;
	}

	while(*p!=NULL)
	{
		if (*p!='.' && *p!='0' && *p!='1' && *p!='2' && *p!='3' 
			&&*p!='4' && *p!='5' && *p!='6' && *p!='7' && *p!='8' 
			&& *p!='9' && *p!='!' && *p!='#'&& *p!='=' && *p!='*'
			&& *p!='@' && *p!='/' && *p!='&')
		{
			return -1;
		}
		*p++;
	}
	return 0;
}

//检查字符串是否为合法,如果含有中文输入的这些字符,则自动替换为英文模式
//输入:要验证的字符串
void CPublicBase::OnCheckInputValidAndReplace(CString &strInput)
{
	strInput.Replace(",", ",");
	strInput.Replace("。", ".");
	strInput.Replace("!", "!");
	strInput.Replace("×", "*");
	strInput.Replace("#","#");
	strInput.Replace("#", "#");
	strInput.Replace("=", "=");
	strInput.Replace("※", "&");
	strInput.Replace("◎", "@");
}

CString CPublicBase::OnTrimNodeAndEnd(CString strMess,char *pchDiv)
{
	int iRet=strMess.Find(pchDiv);
	CString strTmp=strMess.Mid(iRet+1);
	strTmp.Replace("#","");
	strTmp.Replace("!","");
	strTmp.Replace("*","");
	strTmp.Replace("=","");
	strTmp.Replace("/","");
	strTmp.Replace("&","");
	strTmp.Replace("@","");
	return strTmp;	
}

int CPublicBase::OnCompareTime(CString strTime)
{
	CString strLocTime;	
	SYSTEMTIME tm;	

	//设置写环境
	GetLocalTime(&tm);
	strLocTime.Format("%04d%02d%02d%02d%02d%02d",tm.wYear, tm.wMonth, tm.wDay,tm.wHour,tm.wMinute,tm.wSecond);

	if(strLocTime>strTime)
	{
		return 1;
	}
	else
	{
		return -1;
	}	
}

//分解产品代码比如带有001*a1,然后解析为卡号和产品代码
int CPublicBase::OnGetCardAndCode(char *pchInput,char *pchCardDiv, char *pchCard, char *pchCode)
{
	char *pdest;
	int  iLoc=0;
	pdest = strstr( pchInput, pchCardDiv );
	if (pdest!=NULL) 
	{
		iLoc = pdest - pchInput + 1;
		memcpy(pchCard,pchInput,iLoc-1);
		strcpy(pchCode,pchInput+iLoc+strlen(pchCardDiv)-1);
		return 0;
	}
	else
		return -1;
}

//获取第一位数据到中心
char CPublicBase::OnChange(char *pchInput)
{
	char cTmp;
	cTmp=pchInput[0];
	return cTmp;
}

//获取完整的数据a1,2,3,002,去掉卡号002,为a1,2,3,去空格
CString CPublicBase::OnGetSms(char *pchInput,char *pchDiv,char *pchEnd)
{
	CString strTmp;
	char chTmp[SMS_LEN]={0};
	char cDiv;
	cDiv=OnChange(pchDiv);
	for(int j=strlen(pchInput)-1;j>0;j--)
	{
		if (pchInput[j]==cDiv)
		{
			memcpy(chTmp,pchInput,j);
			break;
		}
	}
	strTmp=chTmp;
	strTmp.TrimLeft();
	strTmp.TrimRight();
	strTmp=strTmp+pchEnd;
	return strTmp;
}

//分解数据,比如为  终端号,客户卡号*产品代码,产品数量,产品金额度
//                 00001,001*a1,2,3,002*a2,3,4#,分解为
//a1,2,3#  001作为卡号放置结构体内
//a2,3,4#  002作为卡号放置结构体内
//pchCardDiv 卡号的分隔符号,如为'*'pchDiv 商品的分隔符号,如为',',
int CPublicBase::OnGetNormal(char *pchCardDiv,char *pchDiv,char *pchEnd,char *pchInput, st_Sms *stOut,CString &strOut)
{
	char *pdest=NULL,*ptr=NULL;
	int  iCardLoc=0,iDivLoc=0,iCardPreLoc=0;
	char *pchTmp=NULL;
	char *pchOld=NULL;
	char chSms[SMS_LEN]={0};
	int i=0;
	CString strTmp;

	char cDiv,cCardDiv;
	cDiv=OnChange(pchDiv);
	cCardDiv=OnChange(pchCardDiv);
	
	//保留原有数据值
	for (int k=0;k<strlen(pchInput);k++)
	{
		if (pchInput[k]==cCardDiv)
		{
			if (i>0)//因为第一次的时候取到头一个*号码,前面没有交易数据
			{
				memset(chSms,0x00,sizeof(chSms));
				memcpy(chSms,pchInput+iCardPreLoc+1,k-iCardPreLoc); //取两个"*"号之间的数据
				strTmp=OnGetSms(chSms,pchDiv,pchEnd); //获取完整的数据a1,2,3,002,去掉卡号002,为a1,2,3,去空格
				if(strTmp.GetLength()<4) 
				{
					strOut.Format("您输入的数据%s有误!");
					return -1;
				}
				memcpy(stOut[i-1].chSms,strTmp.GetBuffer(0),sizeof(stOut[i].chSms));
			}

			//向前找到一个逗号,然后将卡号取出来
			for(int j=k-1;j>0;j--)
			{
				if (pchInput[j]==cDiv)
				{
					memset(&stOut[i],0x00,sizeof(stOut[i]));
					memcpy(stOut[i].chCardNo,pchInput+1+j,k-j-1);//复制
					stOut[i].nState=1;			
					break;
				}
			}

			//用力记住前一个*号位置。到时候取两个*号之间的数据
			iCardPreLoc=k;
			i++;		
		}//if (pchInput[k]==pchCardDiv)
	}//for (int k=0;k<strlen(pchInput);k++)

	if (i>=0)//取最后一个*后面的数据。
	{
		if(stOut[i-1].nState==1)
		{
			memset(chSms,0x00,sizeof(chSms));
			memcpy(chSms,pchInput+iCardPreLoc+1,k-iCardPreLoc-1); //取两个"*"号之间的数据
			memcpy(stOut[i-1].chSms,chSms,sizeof(stOut[i].chSms));	
		}
	}
	return 0;	
}

⌨️ 快捷键说明

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