📄 salemang.cpp
字号:
/****************************************************************************
编写日期: 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 + -