📄 statinfo.cpp
字号:
// StatInfo.cpp: implementation of the CStatInfo class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "lane_new.h"
#include "StatInfo.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
extern CLane_newApp theApp;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// 以下信息只需要保存到内存,掉电或程序退出后无须恢复
static UCHAR chCrReason; //身份卡被拒绝原因
static UCHAR chAkStatus; //文件下传状态
static UCHAR chAkIndex; //文件下传索引
static ULONG nDeviceStatus; //保存车道外设的状态
// 设备重新上电后许多故障应当消失,因此掉电时无须保存故障状态
// 以下定义需要长久保存的统计(保存到磁盘中以防止掉电丢失)
// 以下定义MH消息中用到的信息
struct MH_Data{
//缩进为唐勇军加
UINT nMhTotalCount; //小时内总车流
UINT nMhViolateCount; //小时内违章车车流
UINT nMhModifyCount; //小时内修改次数
UINT nMhLoopCount; //小时内感应车流数
UINT nMhTypeCount[9]; //小时内分车类统计的总车流//
UINT nMhClassTypeCount[9][9]; //小时内分车型、车类统计的总车流
UINT nMhBadInvoiceCount; //小时内的产生的废票数
UINT nMhClassBadInvoiceCount[9];//小时内分车型统计的废票数
ULONG nMhTotalMoney; //小时内总金额
ULONG nMhBadMoney; //小时内废票总金额
ULONG nMhClassMoney[10]; //小时内分车型统计的各型车金额
UINT nMhNormalClassCount[10]; //小时内分车型统计正常车车流
UINT nMhClassCount[10]; //小时内分车型统计车流
};
static struct MH_Data MhData;
// 以下定义ES消息需要的信息
struct ES_Data{
UINT nEsTotalCount; //班次内总车流
UINT nEsViolateCount; //班次内违章车流
UINT nEsModifyCount; //班次内更改次数
UINT nEsLoopCount; //班次内感应车流数
UINT nEsTypeCount[9]; //班次内分车类统计的总车流
UINT nEsClassTypeCount[9][9]; //班次内分车型、车类统计的总车流
UINT nEsBadInvoiceCount; //班次内产生的废票数
UINT nEsClassBadInvoiceCount[9];//班次内分车型统计的废票数
ULONG nEsTotalMoney; //班次内总金额
ULONG nEsClassMoney[9]; //班次内分车型统计的人民币收入
ULONG nEsBadMoney; //班次内废票总金额
ULONG nEsBadClassMoney[9]; //班次内分车型统计的废票金额
UINT nEsNormalClassCount[10]; //班次内分车型统计正常车车流
UINT nEsClassCount[10]; //班次内分车型统计车流
};
static struct ES_Data EsData;
// 以下定义车道数据
struct Lane_Data{
UINT nCollectNO; //操作员号码
BOOL nCollectType; //操作员类型(TRUE:收费员)
UCHAR chShiftNO; //班次号
UCHAR chLastShiftNO; //上个班次的班次号
UCHAR chLaneStatus; //车道状态
UCHAR chWorkMode; //车道工作模式
ULONG nShiftTime; //开班时间:dddhhmmss
__int64 nEndTime; //交班时间:yymmddhhmmss
long nInvoiceStart[7]; //发票起号
long nInvoiceEnd[7]; //发票止号
long nInvoiceNow[7]; //当前发票号码
BOOL bHasPreFlag; //已经预打印发票
};
static struct Lane_Data LaneData;
// 以下定义保护现场信息
struct Postevs_Info{
UINT nYear;
UINT nMonth;
UINT nDay;
UINT nHour;
UINT nStatDate;
UINT nDayCountOfYear;
UINT nMinuteOfDay;
// UINT nLaneNO;
};
static struct Postevs_Info PostevsInfo;
CStatInfo::CStatInfo()
{
}
// 统计信息初始化:从文件中读取已保存的数据
void CStatInfo::Initial()
{
ReadPostevs();
}
// 车流++
// 特别地:只有正常收费时才统计MH消息,以下同
void CStatInfo::IncBusCount()
{
CLaneInfo m_clsLane;
CTransInfo m_clsTrans;
int nBusClass=m_clsTrans.BusClass()-'1';//车型从1开始,数组从0开始
int nBusType=m_clsTrans.BusType()-'1'; //车类从1开始,数组从0开始
EsData.nEsTotalCount++; //总车流++
if (LaneData.nCollectType)
MhData.nMhTotalCount++;
// 对违章车,统计违章车流;否则,分情况统计各种车流
if(m_clsTrans.ViolateType()=='1')
{
EsData.nEsViolateCount++;
if (LaneData.nCollectType)
MhData.nMhViolateCount++;
} else {
// 以下分车类统计车流,对违章车,不统计该车流
if((nBusType>=0)&&(nBusType<=9))
{
EsData.nEsTypeCount[nBusType]++; //分车类统计车流++
if(LaneData.nCollectType){
MhData.nMhTypeCount[nBusType]++;
}
if((nBusClass>=0)&&(nBusClass<=9)){ // 以下分车型、车情统计车流
EsData.nEsClassTypeCount[nBusClass][nBusType]++;
if(LaneData.nCollectType)
MhData.nMhClassTypeCount[nBusClass][nBusType]++;
}
}
}
SavePostevs();
}
// 更改次数++
void CStatInfo::IncModifyCount()
{
EsData.nEsModifyCount++;
if(LaneData.nCollectType)
MhData.nMhModifyCount++;
SavePostevs();
}
// 废发票数++
void CStatInfo::IncBadInvoice()
{
CTransInfo m_clsTrans;
int nBusClass=m_clsTrans.BusClass()-'1'; //车型从1开始,数组从0开始
EsData.nEsBadInvoiceCount++;
if(LaneData.nCollectType)
MhData.nMhBadInvoiceCount++;
EsData.nEsClassBadInvoiceCount[nBusClass]++;//分车型累计废票数
if(LaneData.nCollectType)
MhData.nMhClassBadInvoiceCount[nBusClass]++;
// 累计废票金额
int momey=m_clsTrans.Fare();
EsData.nEsBadMoney+=momey;
EsData.nEsBadClassMoney[nBusClass]+=momey;
if (LaneData.nCollectType)
MhData.nMhBadMoney+=momey;
SavePostevs();
}
// 累计金额:非正常收费模式下不累计金额
void CStatInfo::IncMoney()
{
// 分车型统计各型车收入
CTransInfo m_clsTrans;
int nBusClass=m_clsTrans.BusClass()-'1';//车型从'1'开始,数组从0开始
EsData.nEsTotalMoney+=m_clsTrans.Fare();
if(LaneData.nCollectType)
MhData.nMhTotalMoney+=m_clsTrans.Fare();
// 分车型统计金额
if((nBusClass>=0)&&(nBusClass<=9))
EsData.nEsClassMoney[nBusClass]+=m_clsTrans.Fare();
SavePostevs();
}
// 感应车流++
void CStatInfo::IncLoopBusCount()
{
EsData.nEsLoopCount++;
if(LaneData.nCollectType)
MhData.nMhLoopCount++;
SavePostevs();
}
// 设置下传文件索引
void CStatInfo::AkIndex(UCHAR nIndex)
{
chAkIndex=nIndex;
}
// 返回下传文件索引
UCHAR CStatInfo::AkIndex()
{
return chAkIndex;
}
// 设置下传文件状态
void CStatInfo::AkStatus(UCHAR status)
{
chAkStatus=status;
}
// 返回下传文件状态(0:失败;1:成功)
UCHAR CStatInfo::AkStatus()
{
return chAkStatus;
}
// 获取身份卡被拒绝的原因
UCHAR CStatInfo::CrReason()
{
return chCrReason;
}
// 设置身份卡被拒绝的原因(1:黑名单;2:非法卡)
void CStatInfo::CrReason(UCHAR value)
{
chCrReason=value;
}
// 获取总车流数
UINT CStatInfo::EsTotalCount()
{
return EsData.nEsTotalCount;
}
// 获取按车型统计的车辆车流
UINT CStatInfo::EsClassCount(UCHAR nClass)
{
int i=nClass;
if((i>='1')&&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return EsData.nEsClassCount[i];
}
// 获取按车型统计的正常车车流
UINT CStatInfo::EsNormalClassCount(UCHAR nClass)
{
int i=nClass;
if((i>='1')&&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return EsData.nEsNormalClassCount[i];
}
// 获取违章车数目
UINT CStatInfo::EsViolateCount()
{
return EsData.nEsViolateCount;
}
// 获取修改次数
UINT CStatInfo::EsModifyCount()
{
return EsData.nEsModifyCount;
}
// 获取总金额
ULONG CStatInfo::EsTotalMoney()
{
return EsData.nEsTotalMoney;
}
// 获取班次内感应车流数
UINT CStatInfo::EsLoopCount() //班次内感应车流数
{
return EsData.nEsLoopCount;
}
// 获取班次内分车型统计的车流数
UINT CStatInfo::EsTypeCount(UCHAR nClass) //班次内分车类统计的总车流
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return EsData.nEsTypeCount[i];
}
// 获取班次内分车型、车情统计的车流数
UINT CStatInfo::EsClassTypeCount(UCHAR nClass,UCHAR nType) //班次内分车型、车类统计的总车流
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
int j=nType;
if ((j>='1') &&(j<='9')){
j=j-'1';
} else {
j=j-1;
}
return EsData.nEsClassTypeCount[i][j];
}
// 获取班次内废票数
UINT CStatInfo::EsBadInvoiceCount() //班次内的废票数
{
return EsData.nEsBadInvoiceCount;
}
// 获取班次内分车型统计的废票数
UINT CStatInfo::EsClassBadInvoiceCount(UCHAR nClass) //班次内分车型统计的废票数
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return EsData.nEsClassBadInvoiceCount[i];
}
// 获取班次内分车型统计的金额
ULONG CStatInfo::EsClassMoney(UCHAR nClass) //班次内分车型统计的人民币收入
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return EsData.nEsClassMoney[i];
}
// 获取班次内废票总金额
ULONG CStatInfo::EsBadMoney() //班次内废票总金额
{
return EsData.nEsBadMoney;
}
// 获取班次内分车型统计的废票金额
ULONG CStatInfo::EsClassBadMoney(UCHAR nClass) //班次内分车型统计的废票金额
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return EsData.nEsBadClassMoney[i];
}
// 获取小时内感应车流
UINT CStatInfo::MhLoopCount() //班次内感应车流数
{
return MhData.nMhLoopCount;
}
// 获取小时内分车型统计的车流数
UINT CStatInfo::MhTypeCount(UCHAR nClass) //班次内分车类统计的总车流
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return MhData.nMhTypeCount[i];
}
// 获取小时内分车型、车情统计的车流数
UINT CStatInfo::MhClassTypeCount(UCHAR nClass,UCHAR nType)//班次内分车型、车类统计的总车流
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
int j=nType;
if ((j>='1') &&(j<='9')){
j=j-'1';
} else {
j=j-1;
}
return MhData.nMhClassTypeCount[i][j];
}
// 获取小时内废票数
UINT CStatInfo::MhBadInvoiceCount() //班次内的废票数
{
return MhData.nMhBadInvoiceCount;
}
// 获取小时内分车型统计的废票数
UINT CStatInfo::MhClassBadInvoiceCount(UCHAR nClass) //班次内分车型统计的废票数
{
int i=nClass;
if ((i>='1') &&(i<='9')){
i=i-'1';
} else {
i=i-1;
}
return MhData.nMhClassBadInvoiceCount[i];
}
// 获取小时内总金额
ULONG CStatInfo::MhTotalMoney() //总金额
{
return MhData.nMhTotalMoney;
}
// 获取小时内废票总金额
ULONG CStatInfo::MhBadMoney() //班次内废票总金额
{
return MhData.nMhBadMoney;
}
// 获取小时总车流
UINT CStatInfo::MhTotalCount()
{
return MhData.nMhTotalCount;
}
// 获取按车型统计的车辆车流
UINT CStatInfo::MhClassCount(UCHAR nClass)
{
int i=nClass;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -