📄 publicbase.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 + -