📄 statuscontrol.cpp
字号:
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS;
break;
case WORK_MODE_TEST:// 测试模式下返回测试菜单
nMainStatus=WAIT_TEST_MENU;
nSlaveStatus=SHOW_TEST_MENU;
break;
case WORK_MODE_SETUP:// 设置模式下返回参数设置窗口一
nMainStatus=WAIT_SET_MODE;
nSlaveStatus=SHOW_SET_MENU;
break;
case WORK_MODE_EDIT:// 编辑模式下返回编辑菜单
nMainStatus=WAIT_EDIT_MODE;
nSlaveStatus=SHOW_EDIT_MENU;
break;
}
break;
case END_VALID_OK: //确认交班
m_clsRecord.RecordES();
m_clsStat.ClearEs();
m_clsStat.LaneStatus(LANE_STATUS_CLOSE);
m_clsStat.WorkMode(WORK_MODE_NULL);
m_clsStat.ShiftNO(0);
UpdateLaneStatus();
// 交班时重新初始化捕获设备
// SendMessage(theApp.m_pMainWnd->m_hWnd,WM_CAPTURE_WINDOW,RESET_CAPTURE,0);
nMainStatus=WAIT_BEGIN_SHIFT;
nSlaveStatus=SHOW_PRESS_BEGIN;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
////////////////////////////////////////////////////////////
// 输入车型窗口下处理操作员按键,此时按键有两种情况:
// 1、上辆车尚未离去时继续处理上辆车(例如:重打票等)
// 2、对新车辆收费
void CStatusControl::ProcessKeyOfInputBusClass(UINT KeyValue)//输入车型窗口状态的事件
{
// 若交易状态标志为TRUE,说明上辆车信息尚未离去,允许继续处理上一
// 辆车:只允许重打发票或发出定额票。
// 另外:若上辆车未离去前处理下辆车或准备交班,生成上辆车的交易信息
if(m_clsTrans.TollStatusFlag()){
switch(KeyValue)
// 本段程序处理上一辆车的事务(已经收费但车尚未离去)
{
case NORMAL_INPUT_BUS_CLASS:
case NORMAL_CHECK_BLACKCAR:
case NORMAL_HAS_GROUP:
// 上辆车未离去前处理下辆车,生成交易消息
case NORMAL_HAS_END:
// 上辆车未离去前准备交班,生成交易消息
FinishTrade();
break;
case TICKET_KEY: //输入车型窗口输入定额票键
// 若尚未发出定额票,允许重新发出定额票
if(!m_clsTrans.AlreadyIssueRationInvoiceFlag())
{
if(m_clsTrans.BusType()==TYPE_NORMAL)
{
// 重新发出定额票时判断电脑票打印标志,若票据打印机提示已经打印过
// 发票,则已打出的发票为废票,生成类型为废票的TR消息
if(!m_clsTrans.PrintNoSuccessFlag())
{
m_clsTrans.BadInvoiceType('1');
m_clsRecord.RecordTR();
m_clsStat.IncBadInvoice();
// 恢复坏票标志,否则下次生成的TR消息时仍会认为是坏票
m_clsTrans.BadInvoiceType('0');
}
int nBusClass=m_clsTrans.BusClass()-'0';//当前车型即为发票种类的序号
m_clsTrans.InvoiceType('1');//更改发票票型
m_clsTrans.InvoiceNO(m_clsStat.GetInvoiceNow(nBusClass));
m_clsStat.IncInvoiceNow(nBusClass); //发一张票则对应数加
m_clsTrans.AlreadyIssueRationInvoiceFlag (TRUE);
}
}
break;
case REPEAT_PRINT_KEY: //输入车型窗口输入重打票键
// 如果未发出过定额票,允许重打发票
if(!m_clsTrans.AlreadyIssueRationInvoiceFlag())
{
if(m_clsTrans.BusType()==TYPE_NORMAL)
{
m_clsTrans.WarningReason(WARNING_REPEAT_PRINT); //报警原因为
m_clsRecord.RecordEW();
BOOL bPrintFlag=m_clsDevice.PrintInvoice(); //重打发票
// 重新打印票时判断电脑票打印标志,若票据打印机提示已经打印过发票,
// 则上次打印出的发票为废票,生成类型为废票的TR消息
if((!m_clsTrans.PrintNoSuccessFlag())&&(bPrintFlag))
{
// 若重打发票成功,生成类型为废票的TR消息(废票号码为上张发票)
m_clsTrans.BadInvoiceType('1');
m_clsRecord.RecordTR();
m_clsStat.IncBadInvoice();
// 恢复坏票标志,否则下次生成的TR消息时仍会认为是坏票
m_clsTrans.BadInvoiceType('0');
}
if(bPrintFlag){
// 若重打发票成功,重新设置当前发票号码
m_clsTrans.InvoiceNO(m_clsStat.GetInvoiceNow(0));//打印票
m_clsStat.IncInvoiceNow(0); //发一张票则对应数加1
m_clsTrans.PrintNoSuccessFlag(FALSE);
}
}
}
break;
}
}
CBusNormal m_clsCarNormal;
switch(KeyValue)
// 本段程序处理下一辆车事物(当前尚未开始交易的车辆),允许输入车型、
// 查询黑名单、处理车队、交班
{
case NORMAL_INPUT_BUS_CLASS: //用户已经输入车型
// 设置车型,交易数据为非空
m_clsTrans.BusClass(m_clsCarNormal.BusClass());
m_clsTrans.BusType(TYPE_NORMAL); //缺省为正常车
// m_clsTrans.TollStatusFlag(TRUE); //交易开始
m_clsTrans.Fare(m_clsLane.SearchFare(m_clsCarNormal.BusClass(),'1'));//计算通行费,
m_clsDevice.ClearTfi();//当前一辆车没走,收下一辆车需清屏
Sleep(500); // 发清屏命令需一定延时,才能接收新命令
m_clsDevice.PlayFare(); //显示和语音报价
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_FARE;
break;
case NORMAL_CHECK_BLACKCAR: //操作员准备查询黑名单
nMainStatus=WAIT_CHECK_BLACK_CAR;
nSlaveStatus=SHOW_INPUT_BLACKCAR;
break;
case NORMAL_HAS_GROUP: //准备处理车队键
m_clsTrans.BusType(TYPE_ARMY_POLICE);//车队车车情为军警车
m_clsTrans.GroupBusClass('2'); //车队车辆缺省为2型
m_clsTrans.GroupNumber(0);
m_clsDevice.OverlayTransInfo();
m_clsDevice.DefineAutoRailStatus('O');
m_clsDevice.DefineIndicationStatus('V');
m_clsTrans.WarningReason(WARNING_ARMY_POLICE);//报警原因
m_clsRecord.RecordEW();
nMainStatus=WAIT_GROUP;
nSlaveStatus=SHOW_GROUP_CLASS;
break;
case NORMAL_HAS_END: //输入车型窗口输入下班
nMainStatus=WAIT_END_SHIFT;
nSlaveStatus=SHOW_END_INVOICE;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
// 价格窗口下处理按键:允许发出电脑票、发出定额票、修改、处理军车、
// 月票车、免征
void CStatusControl::ProcessKeyOfInputFare(UINT KeyValue)//显示费额窗口状态的事件
{
int mInvoiceType;
switch(KeyValue)
{
case NORMAL_ISSUE_COMPUTER_INVOICE: //显示价钱窗口有确认键按
// 发出电脑票
m_clsDevice.PlayThankYou();
m_clsTrans.BusType(TYPE_NORMAL);//车类为正常收费车
m_clsTrans.InvoiceType(0); //为打印票
if(m_clsDevice.PrintInvoice()) //打印票,成功返回真
{
m_clsTrans.InvoiceNO(m_clsStat.GetInvoiceNow(0));//发票号
m_clsStat.IncInvoiceNow(0); //发一张票则对应数加1
m_clsTrans.PrintNoSuccessFlag(FALSE);
} else {
m_clsTrans.PrintNoSuccessFlag(TRUE);
}
m_clsTrans.IncAllowBusNumber();// 允许过车数加一
m_clsDevice.OverlayTransInfo();
m_clsDevice.DefineAutoRailStatus('O');//自动栏杆开
m_clsDevice.DefineIndicationStatus('V');//通行指示灯绿
m_clsTrans.AlreadyIssueRationInvoiceFlag(FALSE);
m_clsTrans.TollStatusFlag(TRUE); //有交易数据
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
case NORMAL_ISSUE_RATION_INVOICE: //显示价钱窗口有定额票键按
m_clsDevice.PlayThankYou();
m_clsTrans.BusType(TYPE_NORMAL);//车类为正常收费车
mInvoiceType=m_clsTrans.BusClass()-'0';
m_clsTrans.InvoiceNO(m_clsStat.GetInvoiceNow(mInvoiceType));//发票号
m_clsTrans.InvoiceType('1'); //为定额票
m_clsStat.IncInvoiceNow(mInvoiceType); //发一张票则对应数加
m_clsTrans.IncAllowBusNumber();// 允许过车数加一
m_clsDevice.OverlayTransInfo();
m_clsDevice.DefineAutoRailStatus('O');//自动栏杆开
m_clsDevice.DefineIndicationStatus('V');//通行指示灯绿
m_clsTrans.AlreadyIssueRationInvoiceFlag(TRUE);
m_clsTrans.TollStatusFlag(TRUE); //有交易数据
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS;
break;
case NORMAL_POLICE_ARMY_CAR: //显示价钱窗口有军警车键按
m_clsDevice.PlayThankYou();
m_clsTrans.BusType(TYPE_ARMY_POLICE);//车类为军警车
m_clsTrans.Fare(0); //费设置为0
m_clsTrans.WarningReason(WARNING_ARMY_POLICE);//报警原因
m_clsRecord.RecordEW();
m_clsTrans.IncAllowBusNumber();// 允许过车数加一
m_clsDevice.OverlayTransInfo();
m_clsDevice.DefineAutoRailStatus('O');//自动栏杆开
m_clsDevice.DefineIndicationStatus('V');//通行指示灯绿
m_clsTrans.TollStatusFlag(TRUE); //有交易数据
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
case NORMAL_FREE_CAR: //显示价钱窗口有免征键按
m_clsTrans.BusType(TYPE_FREE);
m_clsTrans.WarningReason(WARNING_FREE); //报警原因
m_clsRecord.RecordEW();
nMainStatus=WAIT_AUTHENTICATION;
nSlaveStatus=SHOW_BUS_NO;
break;
case NORMAL_MONTH_CAR: //显示价钱窗口有月票键按
m_clsTrans.BusType(TYPE_MONTH);
m_clsTrans.WarningReason(WARNING_MONTH); //报警原因为
m_clsRecord.RecordEW();
nMainStatus=WAIT_AUTHENTICATION;
nSlaveStatus=SHOW_BUS_NO;
break;
case MODIFY_KEY: //发现输入车型有错,收费员按更改键
m_clsTrans.ModifyType(TRUE);
m_clsTrans.WarningReason(WARNING_MODIFY); //报警原因为
m_clsRecord.RecordEW();
m_clsRecord.RecordTR();
m_clsStat.IncModifyCount();
m_clsTrans.ClearTransData();
m_clsDevice.ClearTfi();
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
// 输入车牌窗口下处理按键:允许取消输入车牌、车牌输入完成
void CStatusControl::ProcessKeyOfInputBusNO(UINT KeyValue)//显示输入特殊车车牌窗口状态的事件
{
char pBusNO[10];
memset(pBusNO,0,10);
CAuthentication m_clsAuthentication;
m_clsAuthentication.GetBusNO(pBusNO);
switch(KeyValue)
{
case AUTHENTICATION_INPUT_BUS_NO_OK: //用户已经输入车牌
if(m_clsTrans.BusType()==TYPE_FREE)
{
// 输入免征车车牌,核对免征车白名单以判断合法性
if(m_clsLane.CheckFreeCar(pBusNO)) //如果是免征车
{
MonthOrFreeOK();
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
} else {
nMainStatus=WAIT_AUTHENTICATION;
nSlaveStatus=SHOW_FREE_NOTE;
}
}
if(m_clsTrans.BusType()==TYPE_MONTH)
{
// 输入月票车车牌,核对月票车白名单以判断合法性
if(m_clsLane.CheckMonthCar(pBusNO)) //如果是月票车
{
MonthOrFreeOK();
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
} else {
nMainStatus=WAIT_AUTHENTICATION;
nSlaveStatus=SHOW_FREE_NOTE;
}
}
break;
case AUTHENTICATION_INPUT_BUS_NO_CANCEL: //输入车牌前按取消键
// 取消输入车牌,返回价格窗口
m_clsTrans.BusType(TYPE_NORMAL);
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_FARE;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
// 确认无效免费车窗口下处理按键:只允许确认无效或确认有效
void CStatusControl::ProcessKeyOfNoteFree(UINT KeyValue)//显示输入特殊车认证窗口状态的事件
{
switch(KeyValue)
{
case AUTHENTICATION_FREE_CHECK_PASS: //免征或月票无效,收费员确认有效
MonthOrFreeOK();
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
case AUTHENTICATION_FREE_CHECK_NOPASS: //免征或月票无效,收费员确认无效
m_clsTrans.BusType(TYPE_NORMAL);
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_FARE;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
// 确认违章窗口下处理按键:只允许确认无效或确认有效
void CStatusControl::ProcessKeyOfViolate(UINT KeyValue) //显示违章车窗口状态的事件
{
switch(KeyValue)
{
case VIOLATE_OK: //确认违章
ProcessViolateOK();
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
case VIOLATE_CANCEL: //否认违章,清除已生成的交易信息
m_clsTrans.ClearTransData();
m_clsDevice.ClearTfi();
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
// 输入车队车型窗口下处理按键:只允许输入车型或退出车队状态
void CStatusControl::ProcessKeyOfInputGroupClass(UINT KeyValue) //显示输入车队车型窗口状态的事件
{
CGroup m_clsGroup;
switch(KeyValue){
case GROUP_CLASS_OK: //输入车队车型
m_clsTrans.GroupBusClass(m_clsGroup.GroupClass());
nMainStatus=WAIT_GROUP;
nSlaveStatus=SHOW_GROUP;
break;
case CANCEL_KEY:
// 若退出车队状态,判断是否仍有车辆等待离去,若无,关闭自动栏杆,
// 通行指示灯变为红色
if(m_clsTrans.AllowBusNumber()==0){
m_clsDevice.DefineAutoRailStatus('F');
m_clsDevice.DefineIndicationStatus('R');
}
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
// 车队计数窗口下处理按键:只允许退出车队状态
void CStatusControl::ProcessKeyOfGroup(UINT KeyValue) //显示车队过车窗口状态的事件
{
switch(KeyValue)
{
case GROUP_KEY_PRESS: //车队结束
m_clsTrans.GroupNumber(0);
// 判断是否仍有车辆等待离去,若无,关闭自动栏杆,通行指示灯变为红色
if(m_clsTrans.AllowBusNumber()==0){
m_clsDevice.DefineAutoRailStatus('F');
m_clsDevice.DefineIndicationStatus('R');
}
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS ;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
// 输入黑名单车牌窗口下处理按键:只允许输入黑名单车牌或退出黑名单
// 查询状态
void CStatusControl::ProcessKeyOfInputBlackCar(UINT KeyValue)//显示输入黑名单车车牌窗口状态的事件
{
char pBusNO[10];
memset(pBusNO,0,10);
CCheckBlackCar m_clsFindBlackCar;
m_clsFindBlackCar.GetBusNO(pBusNO);
switch(KeyValue)
{
case AUTHENTICATION_INPUT_BUS_NO_OK: //用户已经输入车牌
// 无论是否黑名单车辆,记录该车的车牌号码
m_clsTrans.SetBusNO(pBusNO);
if(!m_clsLane.CheckBlackCar(pBusNO))//如果不是黑名单车
{
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS;
} else {
// 黑名单车辆,生成报警消息并提示操作员确认
m_clsTrans.WarningReason(WARNING_BLACKCAR); //报警原因
m_clsRecord.RecordEW();
nMainStatus=WAIT_CHECK_BLACK_CAR;
nSlaveStatus=SHOW_IS_BLACK;
}
break;
case AUTHENTICATION_INPUT_BUS_NO_CANCEL:
// 退出黑名单查询
nMainStatus=WAIT_BUS_NORMAL_INFO;
nSlaveStatus=SHOW_BUS_CLASS;
break;
}
GetCurrentStatus()->DrawWorkInfo(nSlaveStatus);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -