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

📄 salemang.cpp

📁 IP电话计费管理系统本地版
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/****************************************************************************

    编写日期:  2002-07-28
    代码编写:  by xiaolz
    代码功能:  拨号显示,话费计算,状态显示

****************************************************************************/
//v12.03.02 修改8路时双击空白处出现不正确信息的bug
//v12.03.04 增加Sleep(100),在每次发conf命令后,确保能进入相应线路发锁机或解锁命令
#include "stdafx.h"
#include "IPCount.h"
#include "SaleMang.h"
#include "IPCountDlg.h"

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

#define OneSecondTimer 0x0001
#define PERSON_INFO   30

#define nMulti 100//计算话费时乘的一个值 
/////////////////////////////////////////////////////////////////////////////
// CSaleMang dialog


CSaleMang::CSaleMang(CWnd* pParent /*=NULL*/)
	: CDialog(CSaleMang::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSaleMang)
	m_strCName = _T("");
	m_strCTime = _T("");
	m_strCBCount = _T("");
	m_strCDCount = _T("");
	m_strCDStream = _T("");
	//}}AFX_DATA_INIT
	for(int i=0;i<16;i++)
	{
		nCountClk[i]=0;
        nCountMoneyTimes[i]=0;
		nHolidayCount[i]=0;//节假日计数器
    	nWeekCount[i]=0;//周末计数器
        nTimeBetweenCount[i]=0;//优惠时段计数器
        nNoSaleCutCount[i]=0;//无折扣优惠计数器
		nTimeLen[i]=0;//test
	    strGFeeRate[i]="";//费率
	    strSFeeRate[i]="";
		strTotalORate[i]="";
		fTotalORate[i]=0;
        bSaleCutIsValid[i]=FALSE;
		strOFTimeLen[i]="";
		nSaleCutLevelFlag[i]=0;
        nTempCount[i] = 0;		
		for(int j=0;j<4;j++)
			f5[i][j]=0;

	}
    nCountFlag=-1;
	nLineCountFlag=-1;
	nGridCount=0;
	ldlg=new CLineCount(this);
	bCheckLineCount=FALSE;
	bQuitSaleMang=FALSE;
	bCanQuit=TRUE;
    bCountLineAll=FALSE;
	strRestoreTime="";
	bAddKey=FALSE;

}


void CSaleMang::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSaleMang)
	DDX_Control(pDX, IDC_LIST_SCROLL, m_ListScroll);
	DDX_Control(pDX, IDC_EDIT_CTIME, m_eCTime);
	DDX_Control(pDX, IDC_EDIT_MONEY, m_AddMany);
	DDX_Control(pDX, IDC_EDIT_LINE, m_AddLine);
	DDX_Control(pDX, ID_ADD_MONEY, m_AddMoney);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT16, m_LineButton16);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT15, m_LineButton15);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT14, m_LineButton14);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT13, m_LineButton13);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT12, m_LineButton12);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT11, m_LineButton11);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT10, m_LineButton10);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT9, m_LineButton9);
	DDX_Control(pDX, IDC_BUTTON_LINE_COUNT8, m_LineButton8);
	DDX_Control(pDX, IDC_EDIT_CNAME, m_eCName);
	DDX_Text(pDX, IDC_EDIT_CNAME, m_strCName);
	DDX_Text(pDX, IDC_EDIT_CTIME, m_strCTime);
	DDX_Control(pDX, IDC_MSFLEXGRID_SALE, m_SaleGrid);
	DDX_Text(pDX, IDC_EDIT_CBCOUNT, m_strCBCount);
	DDX_Text(pDX, IDC_EDIT_CDCOUNT, m_strCDCount);
	DDX_Text(pDX, IDC_EDIT_CDSTREAM, m_strCDStream);
	DDX_Control(pDX, IDC_MSFLEXGRID_HIDE1, m_HideGrid1);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSaleMang, CDialog)
	//{{AFX_MSG_MAP(CSaleMang)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON_CHGOPER, OnChgoper)
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT, OnLineCount)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT2, OnLineCount1)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT3, OnLineCount2)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT4, OnLineCount3)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT5, OnLineCount4)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT6, OnLineCount5)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT7, OnLineCount6)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT8, OnLineCount7)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT10, OnLineCount9)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT9, OnLineCount8)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT11, OnLineCount10)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT12, OnLineCount11)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT13, OnLineCount12)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT14, OnLineCount13)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT15, OnLineCount14)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT16, OnLineCount15)
	ON_BN_CLICKED(ID_ADD_MONEY, OnAddMoney)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COUNT_ALL, OnLineCountAll)
	ON_NOTIFY(NM_CLICK, IDC_LIST_SCROLL, OnClickListScroll)
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(IDC_QUIT_CONF, OnQuitConf)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSaleMang message handlers

BOOL CSaleMang::OnInitDialog() 
{
	CDialog::OnInitDialog();

	for(int ii=0;ii<16;ii++)//v12.03.05
	{
		nCountClk[ii]=0;
	}

	SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_MANG),TRUE);
	SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_MANG),FALSE);
	bCanQuit=FALSE;
	UpdateData(TRUE);
    CIPCountDlg * mdlg;
	mdlg=(CIPCountDlg *)GetParent();
	if(mdlg==NULL)
		return 0;
	m_strCName=mdlg->m_strName;
	CTime t=CTime::GetCurrentTime();

	m_strCTime=t.Format("%Y-%m-%d %H:%M:%S");
	SetTimer(OneSecondTimer,1000*mdlg->OneSecondOfMin/60,NULL);
	mdlg->ShowCInfo();
	m_strCDStream=mdlg->GetIndex();
	UpdateData(FALSE);
	// TODO: Add extra initialization here
  
	CWnd * hwnd = GetDlgItem (IDC_MSFLEXGRID_SALE);
	hGrid = hwnd->GetSafeHwnd ();
	m_SaleGrid.SetTextArray(0,"亭");
	m_SaleGrid.SetColWidth(0,360);
 
	m_SaleGrid.SetTextArray(1,"状态");
	m_SaleGrid.SetColWidth(1,680);

	m_SaleGrid.SetTextArray(2,"被叫号码");
	m_SaleGrid.SetColWidth(2,1520);

	m_SaleGrid.SetTextArray(3,"起始时间");
	m_SaleGrid.SetColWidth(3,2380);//调试2380

	m_SaleGrid.SetTextArray(4,"时长");
	m_SaleGrid.SetColWidth(4,1100);

	m_SaleGrid.SetTextArray(5,"费率");
	m_SaleGrid.SetColWidth(5,1000);

	m_SaleGrid.SetTextArray(6,"话费");
	m_SaleGrid.SetColWidth(6,900);

	m_SaleGrid.SetTextArray(7,"押金");
	m_SaleGrid.SetColWidth(7,800);

	m_SaleGrid.SetTextArray(8,"找零");
	m_SaleGrid.SetColWidth(8,800);

	m_SaleGrid.SetTextArray(9,"开关");
	m_SaleGrid.SetColWidth(9,780);
    

	int nMaxLine=0;
	nMaxLine = mdlg->nOperateLines + 1;
    if (nMaxLine == 17)
	{  
        ShowButton();
	}

	//////////////////////////////////////////
	CIPCountDlg *Idlg;
	Idlg=(CIPCountDlg *)GetParent();
	/////////////////////////////////////////
	
	for(int i=1;i<nMaxLine;i++)
	{
		CString strLineNum="";
		strNum[i-1]=mdlg->strTempNum[i-1];
		strLineNum.Format("%d",i-1);
		m_SaleGrid.SetTextMatrix( i,0,strLineNum);
		m_SaleGrid.SetTextMatrix( i,1,"锁定");
		m_SaleGrid.SetTextMatrix( i,7,strNum[i-1]);
		m_SaleGrid.SetTextMatrix( i,8,strNum[i-1]);
		m_SaleGrid.SetTextMatrix( i,9,"关");
		
		m_SaleGrid.SetRow(i);
		m_SaleGrid.SetCol(0);
		m_SaleGrid.SetCellForeColor(RGB(255,40,0));
	}

    //从文件中获取费率,现在每次修改费率需重启计费管理对话框
////////////////////////////////////////////////////////////
	m_ListScroll.InsertColumn(0,"流水号",LVCFMT_LEFT,70);
	m_ListScroll.InsertColumn(8,"操作员",LVCFMT_LEFT,80);
	m_ListScroll.InsertColumn(1,"线号",LVCFMT_LEFT,49);
	m_ListScroll.InsertColumn(2,"被叫号码",LVCFMT_LEFT,103);
	m_ListScroll.InsertColumn(3,"起始时间",LVCFMT_LEFT,158);
	m_ListScroll.InsertColumn(4,"时长",LVCFMT_LEFT,75);
	m_ListScroll.InsertColumn(5,"费率",LVCFMT_LEFT,60);
	m_ListScroll.InsertColumn(6,"附加费",LVCFMT_LEFT,60);
	m_ListScroll.InsertColumn(7,"话费",LVCFMT_LEFT,60);
////////////////////////////////////////////////////////////

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


//定时器,主要用来计算时长
void CSaleMang::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
    strRestoreTime="";//初始话为空
	CIPCountDlg *Idlg;
	Idlg=(CIPCountDlg *)GetParent();
	if(Idlg == NULL)
		return ;

	int nMaxActive=0;
	nMaxActive=Idlg->nOperateLines;
	
	CTime t=CTime::GetCurrentTime();
	m_strCTime=t.Format("%Y-%m-%d %H:%M:%S");
	m_eCTime.SetWindowText(m_strCTime);
    CString strCurrent = "";
	strCurrent.Format("%d", t);
	for(int nActiveLine=0;nActiveLine<nMaxActive;nActiveLine++)
	{
		if(Idlg->bTalking[nActiveLine])
		{
			//if(strcmp(m_SaleGrid.GetTextMatrix(nActiveLine+1,9),"关")==0)//待测试
				//Idlg->bTalking[nActiveLine]=FALSE;//03-31
			nCountFlag=nActiveLine;
			nTimeLen[nCountFlag]++;

			if ((nTimeLen[nCountFlag]%16) == 0)//每隔16s校正时长
			{
				#ifdef IPCOUNT_FOR_FS
					nTimeLen[nCountFlag] = OnCountTLen(Idlg->m_szStartTime[nCountFlag], strCurrent);
				#else
				{ 
/******************************************************************************************/
//					if (nTempCount[nCountFlag] < 6)//每次通话大于96秒则加六秒
//					{
//						nTempCount[nCountFlag] ++;//03-31
//						nTimeLen[nCountFlag] = OnCountTLen(Idlg->m_szStartTime[nCountFlag], strCurrent) + nTempCount[nCountFlag];//03-03-31
//					}
//					else
//						nTimeLen[nCountFlag] = OnCountTLen(Idlg->m_szStartTime[nCountFlag], strCurrent) + 6;//03-03-31

					if (nTempCount[nCountFlag] < 6)//每次通话大于96秒则加六秒
					{
						nTempCount[nCountFlag] ++;//03-31
						nTimeLen[nCountFlag] = OnCountTLen(Idlg->m_szStartTime[nCountFlag], strCurrent)*60/Idlg->OneSecondOfMin /*+ nTempCount[nCountFlag]取消加时间*/;//03-03-31
					}
					else
						nTimeLen[nCountFlag] = OnCountTLen(Idlg->m_szStartTime[nCountFlag], strCurrent)*60/Idlg->OneSecondOfMin /*+ 6取消加六秒*/;//03-03-31
/*******************************************************************************************/
				}	
                #endif
			}

			strTimeLen.Format("%d",nTimeLen[nCountFlag]);
			strTimeLen=Idlg->ConvTimeToMin(strTimeLen,nActiveLine);//将时间转化成多少分多少秒

			if(!strRestoreTime.IsEmpty())
			{
				strTimeLen=strRestoreTime;
			}
			m_SaleGrid.SetTextMatrix( nCountFlag+1,4,strTimeLen);
		}
	}

	CDialog::OnTimer(nIDEvent);
}

//计算一次通话的话费

/*void CSaleMang::CountMoney(int nLine)
{
	UpdateData(TRUE);
	strRestoreTime="";//初始话为空
	CIPCountDlg *Idlg;
	Idlg=(CIPCountDlg *)GetParent();
	if(Idlg==NULL)
		return ;
  
	CTime t=CTime::GetCurrentTime();
	CString strCurTime=t.Format("%Y-%m-%d %H:%M:%S");
    CString strCurYear=strCurTime.Mid(0,4);
    CString strCurMon=strCurTime.Mid(5,2);
	CString strCurDay=strCurTime.Mid(8,2);
	CString strCurHour=strCurTime.Mid(11,2);
	CString strWeek;
	strWeek.Format("%d",t.GetDayOfWeek()-1);
	if(strcmp(strWeek,"0")==0)
	    strWeek="7";

	CString str4=m_SaleGrid.GetTextMatrix(nLine+1,4);//时长

    CString str5=strGFeeRate[nLine];
	CString str8=m_SaleGrid.GetTextMatrix(nLine+1,8);//押金
	if(str4.IsEmpty())
		str4="00:00:00";
    nCountMoneyTimes[nLine]++;//附加费率计数器

    double fSaleCutRate=0;//折扣率
	fSaleCutRate=atof(Idlg->strCutRate[nLine]);
    if(fSaleCutRate==0)
		fSaleCutRate=1;

    double fORate=atof(strSFeeRate[nLine]);
	int nOFTimeLen=atoi(strOFTimeLen[nLine]);//附加费率时长


   switch(Idlg->nCutLevelFlag[nLine])
   {
   case 3:
   if((atoi(strCurYear)>=atoi(Idlg->strStartCutYear[nLine]))&&(atoi(strCurYear)<=atoi(Idlg->strEndCutYear[nLine])))
   {
		if((atoi(strCurMon)>=atoi(Idlg->strStartCutMon[nLine]))&&(atoi(strCurMon)<=atoi(Idlg->strEndCutMon[nLine])))
		{
			if((atoi(strCurDay)>=atoi(Idlg->strStartCutDay[nLine]))&&(atoi(strCurDay)<=atoi(Idlg->strEndCutDay[nLine])))
			{  
				nSaleCutLevelFlag[nLine]=3;
				bSaleCutIsValid[nLine]=FALSE;
				nHolidayCount[nLine]++;//节假日计数器加加
				break;
			}
			else
				bSaleCutIsValid[nLine]=TRUE;//过期
		}
		else
			bSaleCutIsValid[nLine]=TRUE;//过期
	}
    else
		bSaleCutIsValid[nLine]=TRUE;//过期
	//过期则判断是否进入下一优惠时段
	if(bSaleCutIsValid[nLine])
	{
		if((strcmp(strWeek,Idlg->strStartCutWeek[nLine])==0)||(strcmp(strWeek,Idlg->strEndCutWeek[nLine])==0))
		{
			
			bSaleCutIsValid[nLine]=FALSE;
			fSaleCutRate=atof(Idlg->strLowCutRate[nLine]);
			nSaleCutLevelFlag[nLine]=2;
			nWeekCount[nLine]++;//进入周末优惠,周末优惠计数器加加
		}
		else
		{
			if((atoi(strCurHour)>=atoi(Idlg->strStartCutHour[nLine]))&&(atoi(strCurHour)<=atoi(Idlg->strEndCutHour[nLine])))
			{
				bSaleCutIsValid[nLine]=FALSE;
				fSaleCutRate=atof(Idlg->strLowestCutRate[nLine]);
				nTimeBetweenCount[nLine]++;//进入优惠时段,优惠时段计数器加加
				nSaleCutLevelFlag[nLine]=1;
			}
			else
			{
				fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
				nNoSaleCutCount[nLine]++;
				nSaleCutLevelFlag[nLine]=0;
			}
		}
	}
	break;
   case 2:
		if((strcmp(strWeek,Idlg->strStartCutWeek[nLine])==0)||(strcmp(strWeek,Idlg->strEndCutWeek[nLine])==0))
		{
			bSaleCutIsValid[nLine]=FALSE;
			fSaleCutRate=atof(Idlg->strCutRate[nLine]);
			nSaleCutLevelFlag[nLine]=2;
			nWeekCount[nLine]++;//进入周末优惠,周末优惠计数器加加
		}
		else
		{
			if((atoi(strCurHour)>=atoi(Idlg->strStartCutHour[nLine]))&&(atoi(strCurHour)<=atoi(Idlg->strEndCutHour[nLine])))
			{
				bSaleCutIsValid[nLine]=FALSE;
				fSaleCutRate=atof(Idlg->strLowestCutRate[nLine]);
				nTimeBetweenCount[nLine]++;//进入优惠时段,优惠时段计数器加加
				nSaleCutLevelFlag[nLine]=1;
			}
			else
			{
				fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
				nNoSaleCutCount[nLine]++;
				nSaleCutLevelFlag[nLine]=0;
			}
		}
	   break;
   case 1:
			if((atoi(strCurHour)>=atoi(Idlg->strStartCutHour[nLine]))&&(atoi(strCurHour)<=atoi(Idlg->strEndCutHour[nLine])))

⌨️ 快捷键说明

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